java 流中的各种read

本文详细介绍了Java中文件的二进制流与字符流读写操作,包括FileInputStream/FileOutputStream、DataInputStream/DataOutputStream、FileReader/FileWriter等类的使用方法及注意事项。

二进制文件读写:
FileOutputStream
FileInputStream
DataOutputStream
DataInputStream
BufferedOutputStream
BufferedInputStream

字符流的读写
Reader
Writer
FileReader
FileWriter
BufferedReader
BufferedWriter
PrintWriter
PrintStream
InputStreamReader
OutputStreamWriter

关于read;
1.FileInputStream :
read()
一个字节一个字节的读取,当读取到字节时就返回该字节的int型数值
read(byte[] b)
先规定一个byte数组长度,将这个流中的字节缓冲到数组b中,则返回读取到的字节个数,到未尾时返回-1
源码:
public int read(byte b[]) throws IOException {
return readBytes(b, 0, b.length);
}
read(byte[] b,int off,int len)
b - 读取字节数组数据,off - 开始在目标数组b的偏移,len - 要读取的最大字节数
返回int读取到的字节数

2.DataInputStream
打字好累啊,我截屏
自动生成代码
好多read,需要两页
注意:
readUTF(),是从输入流中读取UTF-8编码的数据,并以String字符串的形式返回。
readFully();无返回值;要求读出的字节长度与byte[]的长度相同
英语是多么的重要啊
readBoolean();读取到的字节不为零返回true,如果字节是零方法返回false。
readChar();读取两个字节,返回读取到char类型的值;

3.FileReader
这里写图片描述
read(); 读取单个字符。返回作为整数读取的字符,如果已达到流末尾,则返回 -1。
read(char []cbuf);将字符读入数组。返回读取的字符数。如果已经到达尾部,则返回-1。

4.BufferedReader
这里写图片描述
readLine();返回读取到的字符串;

以上只是我的理解,内容只做参考,欢迎提出问题,一起进步哈~~!!^.^

Java IO 中,`read()` 方法是 `InputStream` 类及其子类提供的核心方法之一,用于从输入中读取数据。该方法的使用方式和返回具有重要意义,尤其在处理字节时。 ### 1. `read()` 方法的基本用法 `InputStream` 是所有字节输入的基类,其 `read()` 方法定义如下: ```java public abstract int read() throws IOException; ``` 此方法每次从输入中读取一个字节的数据,并将其作为 `int` 类型返回(取范围为 `0~255`)。如果已经到达的末尾,则返回 `-1`。由于 `read()` 是抽象方法,具体的实现由其子类完成,例如 `FileInputStream`、`ByteArrayInputStream` 等。 以下是一个使用 `FileInputStream` 的示例: ```java import java.io.FileInputStream; import java.io.IOException; public class FileInputStreamDemo { public static void main(String[] args) { try (FileInputStream fis = new FileInputStream("example.txt")) { int data; while ((data = fis.read()) != -1) { System.out.print((char) data); } } catch (IOException e) { e.printStackTrace(); } } } ``` 上述代码通过 `read()` 方法逐字节读取文件内容并输出到控制台[^3]。 ### 2. `read()` 方法的性能问题 尽管 `read()` 方法简单易用,但由于它每次只读取一个字节,因此在处理大文件时效率较低。为了提高性能,通常推荐使用缓冲区的方式进行批量读取,即调用 `read(byte[] b)` 或 `read(byte[] b, int off, int len)` 方法。例如: ```java import java.io.FileInputStream; import java.io.IOException; public class BufferedReadExample { public static void main(String[] args) { try (FileInputStream fis = new FileInputStream("example.txt")) { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = fis.read(buffer)) != -1) { System.out.write(buffer, 0, bytesRead); } } catch (IOException e) { e.printStackTrace(); } } } ``` 这种方式减少了 I/O 操作的次数,从而显著提升了读取效率[^2]。 ### 3. 异常处理与资源管理 在使用 `read()` 方法时,必须注意异常处理和资源管理。传统的做法是在 `finally` 块中手动关闭对象,但自 Java 7 起,可以使用 **try-with-resources** 语句自动管理资源,如上例所示。这种方式不仅简化了代码,还避免了因忘记关闭而导致的资源泄漏问题[^1]。 ### 4. 特殊情况与注意事项 - **阻塞行为**:某些输入(如网络)在没有数据可读时可能会阻塞当前线程,直到有新数据到达或连接关闭。 - **编码问题**:直接将字节转换为字符时需要注意编码格式,否则可能导致乱码。建议结合 `InputStreamReader` 和指定的字符集进行处理。 - **多线程环境**:在并发环境下操作时,需确保线程安全,必要时应加锁或使用同步机制。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值