java - 读取(字节[] b,int关闭,int len): Reading A File To Its End

标签 java fileinputstream

前提

我是在 Java 中使用 steam 的新手,我发现我的问题至少与以前提出的问题不同。这是我此时的代码片段(该代码更多的是概念证明):

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 字符,并相应地打印。 代码的最后两部分对于所有意图和目的来说都是“正确的”:因为代码已经适本地做出了确定并相应地打印 - 这不是我的问题的前提。

假设 filelength() 大于 80 个字节,并且我希望(一次只读取 80 个字节的输入)到达 EOF ,即输入文件的全部内容。打印到控制台的每一行只能包含 80 - 或 x 字节的内容。 我知道调整偏移并且一直在修改它;然而,当我到达 EOF 时,我不想编程崩溃并燃烧 - 可以这么说,“爆炸”。

问题

遇到EOF时,如何确保捕获的字节仍然被读取并且for循环中的代码仍然被执行?

例如,将上面的inputStream.read()更改为:

inputStream.read(byteArray, offset, 80)

如果在读取文件中的最后一个字节时遇到文件结尾 (EOF),这将“轰炸”。例如,如果我尝试读取 80 个字节,但只剩下 10 个字节。

最佳答案

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

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

关于java - 读取(字节[] b,int关闭,int len): Reading A File To Its End,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24398368/

相关文章:

java - 为输入流函数创建 java 包装器

java - 如何以适当的方式关闭OutputStream?

java - 在 Apache Tomcat 上运行时出现 FileNotFound 异常?

java - 如何从 AsyncTask 的类中获取 JsonArray

java - 在J2me中显示Png图像

java - 如何解决docbuilder SAX异常: unexpected end of document?

java - Jersey 注入(inject) AbstractBinder 未调用配置

java - Android Brightcove 视频播放器

java - 将对象写入文件有什么好处?

java - 从使用字节流写入的文件中读取