我刚接触使用Java中的流程,并且发现我的问题至少与先前提出的问题不同。这是我代码的一个片段(代码更像是一个概念证明):
try {
//file is initialized to the path contained in the command-line args.
File file = new File(args[0]);
inputStream = new FileInputStream(file);
byte[] byteArray = new byte[(int)file.length()];
int offset = 0;
while (inputStream.read(byteArray, offset, byteArray.length - offset) != -1) {
for (int i = 0; i < byteArray.length; i++) {
if (byteArray[offset + i] >=32 && byteArray[offset + i] <= 126) {
System.out.print("#");
} else {
System.out.print("@");
}
//offset = byteArray.length - offset;
}
}
这是我的目标:创建一个只读取80个字节输入的程序(数字是任意的 - 让它是 x ),决定该段中的每个字节是否代表ASCII字符,并相应地打印。 代码的最后两部分是&#34;正确&#34;因为所有意图和目的:因为代码已经适当地做出决定和打印,因此 - 这不是我的问题的前提。
让我们说length()
的{{1}}大于80个字节,我希望 - 一次只能读取80个字节的输入 - 来达到EOF,即输入档案的全部内容。打印到控制台的每一行只能包含80 - 或 x 量的 - 字节内容。 我知道调整偏移量并且一直在修补它;然而,当我点击EOF时,我不想编程崩溃和烧毁 - 可以说是爆炸&#34;可以这么说。
遇到EOF时,如何确保仍然读取捕获的字节,并且仍然执行file
循环中的代码?
例如,将上述for
更改为:
inputStream.read()
这将&#34;炸弹&#34;是在读取文件中的最后一个字节时遇到的文件结尾(EOF)。例如,如果我试图读取80个字节,只剩下10个字节。
答案 0 :(得分:3)
read的返回值告诉您读取的字节数。这将是&lt; = length
的值。仅仅因为文件大于length
并不意味着length
个字节数的请求实际上会导致许多字节被读入byte[]
。
返回-1
时,表示EOF。它还表示没有数据读入您的byte[]
。