【发布时间】:2014-04-21 14:11:22
【问题描述】:
我对@987654321@ 和output stream 感到困惑。我们什么时候需要使用Buffered output 和input Streams。 Buffered Reader 和 Buffered Writer 也一样?
【问题讨论】:
标签: java io buffer inputstream outputstream
我对@987654321@ 和output stream 感到困惑。我们什么时候需要使用Buffered output 和input Streams。 Buffered Reader 和 Buffered Writer 也一样?
【问题讨论】:
标签: java io buffer inputstream outputstream
查看http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html(和其他人)了解如何使用它们以及它们的用例是什么。您可以使用缓冲包装类来使用它们的方法(在更高的抽象级别上),例如 BufferedReader.readLine(),而不是处理流的字节处理,并让语言处理底层问题。
【讨论】:
缓冲区的使用和原因: 没有缓冲区 I/O 意味着每个读取或写入请求都由底层操作系统直接处理。这会使程序的效率大大降低,因为每个此类请求通常都会触发磁盘访问、网络活动或其他一些相对昂贵的操作。
为了减少这种开销,Java 平台实现了缓冲 I/O 流。缓冲输入流从称为缓冲区的内存区域读取数据;仅当缓冲区为空时才调用本机输入 API。类似地,缓冲输出流将数据写入缓冲区,并且只有在缓冲区已满时才会调用本机输出 API。
程序可以使用我们现在多次使用的包装习惯将非缓冲流转换为缓冲流,其中非缓冲流对象被传递给缓冲流类的构造函数。以下是您可以如何修改 CopyCharacters 示例中的构造函数调用以使用缓冲 I/O:
inputStream = new BufferedReader(new FileReader("xanadu.txt"));
outputStream = new BufferedWriter(new FileWriter("characteroutput.txt"));
参考:Java Docs
【讨论】:
输入流=从文件中读取字节
输出流= 将字节写入文件
缓冲阅读器=使用缓冲区从文件中读取字符
Buffered writer= 使用缓冲区将字符写入文件
缓冲输入流 = 使用缓冲区从文件中读取字节
缓冲输出流 = 使用缓冲区将字节写入文件
总是更喜欢缓冲流或读取器/写入器,因为它们在写入或读取之前使用缓冲内存而不是实际的物理内存。它们更高效、更快捷。
Stream和reader/writer只有读/写、字节或字符的区别。
【讨论】: