Java IO -- 字节流 & 字符流

java基础入门-19-【IO(字节流&字符流)】 阅读详情

输入和输出操作

若想要将程序运行的数据在程序运行结束都保存下来(持久化操作),或者将存储在硬盘中的数据在程序运行时读取出来,那么就要进行输入和输出操作。

  • 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作。
  • 把持久化设备上的数据读取到内存中这个动作称为输入(读)Input 操作。
  • 因此我们把这种输入和输出动作称为IO操作。

Java 字符流 和 字节流

java程序中所有数据都是以流的方式传输和存储的

程序中需要数据是需要输入流进行读入数据,当程序需要保存或输出数据时,需要输出流写出数据
java中按照传输方式的不同,可以分为字符流和字节流

字节流: 用于处理字节文件、二进制文件(对象)

输入:InputStream(Abstract)

FileInputStream // 字节输入流
BufferedInputStream // 字节缓冲输入流

输出:OutputStream(Abstract)

FileOuputStream // 字节输出流
BufferedOutputStream // 字节缓冲输出流
字符流:用于处理字符、字符串

输入:Reader(Abstract)

FileReader // 字符输入流
BufferedReader // 字符缓冲输入流

输出:Writer(Abstract)

FileWriter // 字符输出流
BufferedWriter // 字符缓冲输出流
  1. 操作流程
|--- 1.创建一个输入流(读操作:InputStream)
|--- 2.创建一个输出流(写操作:OutputStream)
|--- 3.进行读取/写入操作
|--- 4.关闭输入/输出流

Java 字节流

流中保存的实际都是字节文件 ???

在数据传输过程中,一切数据(文本、图像、音频等)最终存储的都为一个个字节,也就是二进制数字。所以在数据传输中使用二进制数据可以完成任意数据的传递。因此在进行文件传输时,要始终明确,传输的始终都是二进制数据。

字节流 读取 & 写入文件
创建输出流时(写入文件)的不同构造器

将数据写入指定文件,如果文件不存在则会自动创建,如果文件已存在,则进行覆盖

public FileOutputStream(File file) throws FileNotFoundException
public FileOutputStream(String name) throws FileNotFoundException

将数据写入指定文件,如果文件已经存在,但不想覆盖该文件,以便保留原有数据。可以使用以下构造器:

public FileOutputStream(File file, boolean append) throws FileNotFoundException
public FileOutputStream(String name,boolean append) throws FileNotFoundException

创建一个向指定 File对象表示的文件中写入数据的文件输出流。如果第二个参数为 true,则将字节写入文件末尾处,而不是写入文件开始处。

如果该文件存在,但它是一个目录,而不是一个常规文件;或者该文件不存在,但无法创建它;抑或因为其他某些原因而无法打开它,则抛出FileNotFoundException。

使用IO字节流复制文件
public class FileIOTest {

    public static void main(String[] args) throws IOException {
        // 创建输入流
        FileInputStream inputStream = new FileInputStream(new File("test.txt"));
        // 创建输出流,一经创建就必须明确数据的写入位置
        // 输出流的写入位置是文件,会自动创建,如果已存在,那么会覆盖掉原有文件,若想在原有文件末尾追加数据,可选用相应构造器
        FileOutputStream outputStream = new FileOutputStream(new File("test-copy.txt"));
        int len = 0;
        byte[] data = new byte[1024];

        while ((len = inputStream.read(data)) != -1) {
            outputStream.write(data, 0, len);
        }

        outputStream.close();
        inputStream.close();
    }
}
字节缓冲流

字节缓冲流根据流的方向,共有2个:
- 写入数据到流中,字节缓冲输出流 BufferedOutputStream
- 读取流中的数据,字节缓冲输入流 BufferedInputStream

它们的内部都包含了一个缓冲区,通过缓冲区读写,提高了IO流的读写速度

用法与普通输入流基本一致,但在创建时需要传入一个相应的流

public static void copyFile(File f, File f2) throws IOException {
    BufferedInputStream input = new BufferedInputStream(new FileInputStream(f));
    BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(f2));
    int len = 0; 
    byte[] data = new byte[1024];

    while ((len = input.read(data)) != -1) {
        output.write(data, 0, len);
    }

    output.close();
    input.close();
}

Java 字符流

尽管计算机中一切都是以字节为单位存储的,我们可以使用java的字节流传输任何格式的文件。但是在IO开发过程中,会经常传输字符数据,而以字节流传输字符数据时,每次都需要将字符串转换成字节再处理,这使得程序员无法对数据内容进行判断(程序员只能识别字符,无法识别字节)。为便于操作,java提供了专门以字符作为操作单位的类——字符流,其底层仍然为字节流

字符流只能操作字符,无法操作其他数据,如声音、视频等。

字节流与字符流的转换(转换流)

OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。

// 构造器
public OutputStreamWriter(OutputStream out) // 创建使用默认字符编码的 OutputStreamWriter

public OutputStreamWriter(OutputStream out, String charsetName) throws UnsupportedEncodingException // 创建使用指定字符集的 OutputStreamWriter。

// 使用
OutPutStreamWriter writer = new OutputStreamWriter(new FileOutputStream("test.txt"), "UTF-8");
OutputStreamWriter流对何如何把字符转成字节输出?

其实在OutputStreamWriter流中存在自己的缓冲区,当我们调用OutputStreamWriter对象的write方法时,会拿着字符到指定的码表中进行查询,把查到的字符编码值转成字节数(调用编码转换器)存放到OutputStreamWriter缓冲区中。然后再调用刷新功能,或者关闭流,或者缓冲区存满后会把缓冲区中的字节数据使用字节流写到指定的文件中。

InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

// 构造器
public InputStreamReader(InputStream in) // 创建一个使用默认字符集的InputStreamReader

public InputStreamReader(InputStream in, String charsetName) throws UnsupportedEncodingException // 创建使用指定字符集的 InputStreamReader

// 使用
InputStreamReader reader = new InputStream(new FileInputStream("test.txt"), "UTF-8");

注意:在读取指定的编码的文件时,一定要指定编码格式,否则就会发生解码错误,而发生乱码现象

转换流的子类(字符流及其缓冲流)
字符流的使用
public class ReaderWriterTest {

    public static void main(String[] args) throws IOException {
        FileReader reader = new FileReader("水浒传.txt");
        FileWriter writer = new FileWriter("水浒传-copy.txt");

        int len = 0;
        char[] data = new char[1024];
        // 每次读取一个字符
        // while ((len = reader.read()) != -1) {
        // 每次读取一个数组
        while ((len = reader.read(data)) != -1) {
            writer.write(data, 0, len);
        }

        writer.close();
        reader.close();
    }
}
缓冲流的使用
public class BufferedReaderWriterTest {

    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new FileReader("水浒传.txt"));
        BufferedWriter writer = new BufferedWriter(new Filewriter("水浒传-copy.txt"));

        int len = 0;
        char[] data = new char[1024];
        // 每次读取一个字符
        // while ((len = reader.read()) != -1) {
        // 每次读取一个数组
        while ((len = reader.read(data)) != -1) {
            writer.write(data, 0, len);
        }

        writer.close();
        reader.close();

    }
}

OutputStreamWriter和InputStreamReader是字符和字节的桥梁:也可以称之为字符转换流。字符转换流原理:字节流+编码表。

FileWriter和FileReader:作为子类,仅作为操作字符文件的便捷类存在。当操作的字符文件,使用的是默认编码表时可以不用父类,而直接用子类就完成操作了,简化了代码。

注意:一旦要指定其他编码时,绝对不能用子类,必须使用字符转换流。什么时候用子类呢?条件:1、操作的是文件。2、使用默认编码

2025-08-19利用opencv检测图片中文字及图片的坐标 该代码实现了图片中中文文本的检测与位置计算功能。主要使用CnOcr库进行OCR识别,结合OpenCV和PIL库处理图像。功能包括:1)检测图片中的中文文本及位置坐标;2)计算每个文本的像素宽度和高度;3)在原图上绘制文本边界框并标注识别结果。代码通过put_chinese_text函数解决中文显示问题,最终输出各文本内容、坐标位置及尺寸信息。适用于需要获取图片中文字精确位置的应用场景。 阅读详情

相关推荐

蓝牙钥匙 第48次 全面解析防中继攻击保护:从原理到防护技术实践

中继攻击已成为物联网安全领域的重要威胁,2023年全球相关损失达数十亿美元。本文深入分析中继攻击原理,揭示其通过转发设备延长通信距离而不破解加密的特点。重点探讨两种关键防护技术:基于距离测量的方法(包括UWB超宽带技术)可精确检测异常距离;基于时间戳的挑战-响应机制则通过严格时间窗口识别中继延迟。文章还提出多层次防护体系构想,结合AI异常检测和量子安全协议等前沿技术。研究显示,集成多种防护技术并遵循行业标准是应对中继攻击的有效途径,为物联网设备安全提供重要参考。

IT深耕十余载,大道之简 1834

java IO的字节流和字符流及其区别

java IO的字节流和字符流及其区别 字节流和字符流的概念 1.1 字节流继承于InputStream OutputStream, 1.2 字符流继承于InputStreamReader OutputStreamWriter。 在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。 字节流与字符流的区别 2.1 要把一片二进制数据数据逐一输出到某个设备中,或者从某

汐日南莘的博客 955

手把手教你搭建日本亚马逊CVV钓鱼系统(含自动验证功能)

本文详细介绍了电商平台安全防护的关键实践,重点讲解了如何构建自动化风控系统。内容包括基础架构设计、用户行为分析、交易风险评估模型构建、验证机制实现以及系统部署优化,帮助电商平台有效识别和防范安全威胁,同时提升用户体验。

weixin_30952535的博客 818

Java IO——字节流和字符流详解&区别对比

本文将详细介绍字节流和字符流,剖析它们之间的本质区别,以及区别和对比。

卜大爷的博客 4万+

S速度曲线轨迹规划(普通变频位置闭环控制算法详细介绍+SCL代码)

位置控制用PD控制器,详细内容介绍请查看下面博客文章:PD控制器算法详细解读_RXXW_Dor的博客-优快云博客鉴于积分和微分在工程上的大量应用,这篇博文主要讲解工程上的如何求导f'(x),导数反映的是函数(信号)的变化率,牛顿也是在研究运动的时候提出了微积分的概念,我们知道反映位移变化的快慢程度是速度v(t),反映速度变化快慢程度的物理量是加速度(速度的变化率)。

RXXW_Dor的博客 3891

RK3588之内存带宽计算及达成率

本章来和大家介绍一下内存带宽的计算与达成率

文艺小少年的博客 1816

Java IO流(字节流&字符流)

生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrl+s,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键盘、内存、硬盘、外接设备等等。我们把这种数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为输入input和输出output,即流向内存是输入流,流出内存的输出流。Java中I/O操作主要是指使用java.io包下的内容,进行输入、输出操作。也叫做数据,也叫做作数据。

qq_48763502的博客 2046

【DaVinci Configurator专题】-2-将CAN 2.0或CANFD Matrix的Arxml/DBC文件导入到CFG

共9页 目录 1 打开DaVinci Configurator,导入Arxml文件 2 解决导入Arxml文件后可能会出现的一些错误 3 验证CFG的配置 4 根据CFG的配置生成代码 5 结尾 <--返回「实战篇」博文-总目录--> <--返回「Autosar从入门到精通-实战篇」专栏主页--> 关键词: Open the Input Files Assistant Complete update process Update ECU configurati

「汽车电子助手」的博客 6127

Java之IO流(字节流&字符流)

FileOutputStream类是Java中用于将数据写入文件的类。它属于Java IO库中的一部分,位于java.io包中。FileOutputStream类提供了多个构造方法,可以根据需要选择不同的构造方法来创建输出流。FileInputStream类是Java中用于读取文件数据的类。它继承自InputStream类,并提供了一些额外的方法来读取文件中的字节数据。类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。类是写出字符到文件的便利类。

lghlhg的博客 1516

零基础学习simulink-- 基于自适应模糊PID控制的直流电机速度控制系统

通过上述代码实现,您可以逐步创建和搭建一个基于自适应模糊PID控制的直流电机速度控制系统。该系统能够根据电机的状态和误差实时调整PID参数,确保电机速度稳定在设定范围内。自适应模糊PID控制具有较强的鲁棒性和适应性,能够在存在不确定性和扰动的情况下提供快速且精确的控制性能。Simulink提供了强大的建模和仿真工具,使得控制系统工程师能够快速构建复杂的控制算法,并将其应用于实际工程中。直流电机建模:建立直流电机的动态模型,包括电枢电压、电流、转速和负载扭矩。自适应模糊PID控制器设计。

amy_mhd的博客 413

ABAP 百科全书的阅读目录(2024版)

909 篇 ABAP 技术文章的目录

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4249

Java IO操作 字节流&字符流

参考字节流与字符流的区别详解 1.基本概念 流:程序通过流来传输和保存数据 程序的输入输出都是以流的方式,流里保存的是字节。 Java IO通过Stream(流)来实现。Java中定义了两种类型的流:字节型,和字符型。 关于流,可以理解为是一种“数据的管道”。管道中流动的东西可以是基于字节,也可以是基于字符的等。就好像管道里面可以流动水,也可以流动石油一样。 输入流 和 输出流:程序 需...

dream_heheda的博客 475

一种低照度目标检测新策略:IAT集成YOLOv8实现暗光与雾霾环境下的性能优化【附核心实战代码】

随着深度学习和计算机视觉的快速发展,目标检测模型在各个领域中的应用不断扩展,特别是在低照度环境下的视觉任务。YOLOv8作为当前最先进的目标检测模型之一,在高亮度和良好照明条件下表现出色,但在低照度环境下的性能存在一定的不足。为了解决这一问题,我们提出了一种轻量级的低照度图像增强网络(IAT)来改进YOLOv8的暗光检测能力。本篇文章将深入探讨这一创新改进,并附带代码实现,帮助大家更好地理解这一技术的应用和效果。

一键难忘的博客 3503

java io 字节流替换_Java IO操作 字节流&字符流

1.基本概念流:程序通过流来传输和保存数据 程序的输入输出都是以流的方式,流里保存的是字节。Java IO通过Stream(流)来实现。Java中定义了两种类型的流:字节型,和字符型。 关于流,可以理解为是一种“数据的管道”。管道中流动的东西可以是基于字节,也可以是基于字符的等。就好像管道里面可以流动水,也可以流动石油一样。输入流 和 输出流:程序 需要数据的时候,通过输入流来获取数据。程序 需要...

weixin_29310631的博客 336

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Java IO学习【15】字节流和字符流转换&小注意点

看到\r\n这么复杂的编程就会想到readLine的方法,但在字节流InputStream里面是没有这个方法的,这个方法只有字符流BufferedReader里面有,然而字符流装饰不了字节流,所以就需要转换。所以我们就在字符流子类对象里面找到了InputStreamReader(字节流+字符流),这就是字节和字符转换方式。InputStreamReader 是字节流通向字符流的桥梁!同时类似的就有字符流向字节流的转换。

linweieran的博客 687

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java IO 02 字节流 & 字符流

1 字节流 1.1 字节输出流 OutputStream 1)FileOutputStream:用于将数据写入到文件中。 示例:将数据写入到文件 // 1 创建存储数据的文件。 File file = new File("/Users/Mac/mydata/ioouttest.txt"); // 2 创建一个用于操作文件的字节输出流对象。一创建就必须明确数据存储目的地。 FileOutpu...

lihaogn的博客 151

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

java io 流选择题_Java练习题 - 字节流&字符流

练习一:字节输出流写出字节数据描述:利用字节输出流一次写一个字节的方式,向D盘的a.txt文件输出字符‘a’。答案操作步骤:1.创建字节输出流FileOutputStream对象并指定文件路径。2.调用字节输出流的write(int byte)方法写出数据代码:public class Test01_01 {public static void main(String[] args) throws...

weixin_42394054的博客 934

Java-IO-FAQ-字符流&字节流

字符流&字节流

深度安全实验室 114

Java基础知识22——IO流day02-IO流的分类&字节流&字符流

IO流的分类划分 字节流 字符流

心情舒畅 265

java阶段八之文件IO流----字节流&字符流&字节缓冲流&字符缓冲流

一、字节流 1.1 字节流写入/读取【应用】 字节流抽象基类 InputStream:这个抽象类是表示字节输入流的所有类的超类。OutputStream:这个抽象类是表示字节输出流的所有类的超类。 子类名特点:子类名称都是以其父类名作为子类名的后缀。 1.1.1 字节输出流(写数据) FileOutputStream(String name):创建文件输出流以指定的名称写入文件 使用字节输出流写数据的步骤: FileOutputStream(String name)做了三件事情: ①调用系统功能创建了文件

qq_45043813的博客 481

快速查漏补缺Java基础知识(七)IO流(字节流&字符流)

生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrl+s,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键盘、内存、硬盘、外接设备等等。我们把这种数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为输入input和输出output,即流向内存是输入流,流出内存的输出流。Java中I/O操作主要是指使用java.io包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做作写出数据。

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 278

Day13-Java进阶-IO字节流&字符流及其练习题

*FileReader: 用于读取纯文本文件,解决中文乱码问题构造方法:1. public FileReader(String fileName) 字符输入流关联文件,路径以字符串形式给出2. public FileReader(File file) 字符输入流关联文件,路径以File对象形式给出成员方法:public int read() : 读取单个字符public int read(char[] cbuf) : 读取一个字符数组, 返回读取到的有效字符个数*/

weixin_68063226的博客 776

[从0开始学Java|第二十八天]IO流(字节流&字符流)

摘要:本文介绍了Java中IO流的基本概念和用法。主要内容包括:1) IO流分类,分为字节流和字符流;2) 字节流操作详解,包括FileOutputStream和FileInputStream的基本用法、文件读写、换行续写及文件拷贝;3) 字符集原理及乱码问题;4) 字符流操作,如FileReader和FileWriter的使用。文章通过代码示例演示了各种IO操作,并比较了字节流和字符流的使用场景,为Java文件操作提供了实用指导。

chasing_dreamsss的博客 183

Java IO流->处理流->缓冲流->字节流&字符流

示例代码: import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; impor

进击的Nico 448

超牛牪犇Java之IO流(后篇)字节流&字符流&转换流&缓冲流

一.字节流文件的续写:利用构造方法的参数进行续写(布尔参数)true 表示续写FileOutputStream fos = new FileOutputStream(file, true); fos.write("hello\n".getBytes()); fos.write("TaylorSwift\n".getBytes());mac的换行是加 "\n"windows的换行是加 "\r\n"e...

程序猿的奇幻漂流 325

Java基础:IO流之字节流和字符流

一、流的概念流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL。流的方向是重要的,根据流的方向,流可分为两类:输入流和输出流。用户可以从输入流中读取信息,但不能写它。相反,对输出

JackChan 1万+
上一篇: Java 方法传参
下一篇: Java IO -- 序列化
Tennysons
博客等级 码龄10年 0粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值