我想从文本文件中逐行读取并将它们存储在ArrayList中(每行作为ArrayList中的一个条目)。
到目前为止,我了解到BufferedInputStream会写入缓冲区,并且只有在缓冲区为空时才进行另一次读取操作,从而减少操作系统的操作量。
我的理解正确吗 - 我说得通吗?
如果上述情况属实,那么在什么情况下会使用DataInputStream呢?最后,我应该使用这两者中的哪一个,为什么 - 还是无所谓呢?
我想从文本文件中逐行读取并将它们存储在ArrayList中(每行作为ArrayList中的一个条目)。
到目前为止,我了解到BufferedInputStream会写入缓冲区,并且只有在缓冲区为空时才进行另一次读取操作,从而减少操作系统的操作量。
我的理解正确吗 - 我说得通吗?
如果上述情况属实,那么在什么情况下会使用DataInputStream呢?最后,我应该使用这两者中的哪一个,为什么 - 还是无所谓呢?
使用正常的InputStream
(如FileInputStream
)包装在InputStreamReader
中并再次包装在BufferedReader
中 - 然后在BufferedReader
上调用readLine
。
DataInputStream
适用于读取原始数据、长度前缀字符串等。
readLine
方法,而这个问题涉及到读取行。 - Jon Skeetfinal InputStream inputStream = ...;
final BufferedInputStream bufferedInputStream =
new BufferedInputStream(inputStream);
final DataInputStream dataInputStream =
new DataInputStream(bufferedInputStream);
DataInputStream
不会缓存输入,而BufferedInputStream
会(显然)。通过将InputStream
包装在BufferedInputStream
中,然后再将BufferedInputStream
包装在DataInputStream
中,您可以获得一个更易于处理的输入流(DataInputStream
提供的方便方法很有用),同时由缓冲读取器支持,使I / O更高效。 - Mike HollerInputStream:这是一个基类,用于从流(网络或文件)中读取字节,提供从流中读取字节并删除流的末尾的功能。
DataInputStream:用于直接读取原始数据类型的数据。
BufferInputStream:从输入流中读取数据,并使用缓冲区优化访问数据的速度。
在需要以跨平台的方式解释由非Java语言写入的文件中的原始类型时,应使用DataInputStream。
它们的区别在于:
DataInputStream 处理二进制数据,而 BufferedReader 处理字符数据。
所有基本数据类型都可以使用 DataInputStream 类中相应的方法进行处理,而只有字符串数据可以从 BufferedReader 类中读取,并且需要将其解析为相应的基本数据类型。
DataInputStream 是过滤流的一部分,而 BufferedReader 不是。
DataInputStream 占用更少的内存空间,因为它是二进制流,而 BufferedReader 占用更多的内存空间,因为它是字符流。
DataInputStream 处理的数据量有限,而 BufferedReader 处理的字符数范围更广。