问题之一涉及编写仅使用大约1兆字节内存的程序来将文件内容存储为位数组,每个位代表文件中是否存在7位数字。
这意味着您需要以字节(不是字符)的形式读取文件。
假设您确实有真正的要求,无需缓冲就可以读取文件,那么您应该使用
FileInputStream该类。它没有缓冲。它精确地读取(或尝试读取)您要求的字节数。
如果随后需要将这些字节转换为字符,则可以通过将适当的
String构造函数应用于
byte或来实现
byte[]。请注意,对于诸如的多字节字符编码
UTF-8,您
需要 读取足够的字节才能完成每个字符。做到没有预读的可能性有点棘手……并且需要您正在阅读的字符编码的“知识*”。
(您可以通过
CharsetDeprer直接使用来避免该知识。但是随后您需要使用
depre对
Buffer对象进行操作的方法,这也有些复杂。)
就其价值而言,Java 明确 区分了字节流和字符流I /
O。前者由
InputStream和支持
OutputStream,后者由
Reader和支持
Write。该
InputStreamReader班是一个
Reader,即
适应 的
InputStream。您不应该考虑将其用于想要按字节读取内容的应用程序。



