read(byte [] b,int off,int len):读取文件到结尾

时间:2014-06-25 00:22:04

标签: java fileinputstream

PREMISE

我刚接触使用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个字节。

1 个答案:

答案 0 :(得分:3)

read的返回值告诉您读取的字节数。这将是&lt; = length的值。仅仅因为文件大于length并不意味着length个字节数的请求实际上会导致许多字节被读入byte[]

返回-1时,表示EOF。它还表示没有数据读入您的byte[]