【发布时间】:2014-06-01 01:35:16
【问题描述】:
我需要一次一行地从文件中读取二进制数据。但似乎我一次只能使用 FileInputStream 读取 n 个字节,有什么建议吗?
FileInputStream inputStream = new FileInputStream("C:/dir/testfile");
byte[] buffer = new byte[3480];
inputStream.read(buffer);
【问题讨论】:
-
二进制文件中没有“行”之类的东西。它要么是单个“事物”,要么具有基于记录/字段的特定记录格式,告诉您每个要读取多少字节。
-
而当你读取时,必须将返回值存储在一个变量中,测试它是否为-1,否则将其用作缓冲区中数据的长度。 read() 方法没有义务填充缓冲区。
-
请解释一下“行”是什么意思。如果有一些特殊的字节用作分隔符(如
\n),您可能必须自己做艰苦的工作(即搜索字节,使用Arrays.copy提取数组的所需部分,将子数组放在一起如果它们位于不同的缓冲区中),除非有一些我不知道的有用方法。 -
@ajb 它不能是二进制文件中的特殊字符,除非还有转义约定,因此它可以显示为数据。
-
@EJP 也许吧。我们真的不知道他要处理什么样的文件。