Java 读取(字节[]b,int off,int len):将文件读取到底 前提

Java 读取(字节[]b,int off,int len):将文件读取到底 前提,java,fileinputstream,Java,Fileinputstream,我刚开始在Java中使用steams,我发现我的问题至少与之前提出的问题有所不同。这里是我在这个时刻的代码片段(代码更像是一个概念证明): 如果在读取文件中的最后字节时遇到文件结尾(EOF),则会出现“爆炸”。例如,如果我试图读取80个字节,只剩下10个。的返回值告诉您读取的字节数。这将是从.read()返回的值,是否总是读取的字节数?在第一种情况下,即未经参数化的情况下,abstract int.read()(文档,),在我看来,作为读者,返回的数字是十进制形式(0到255)输入的一个字节的字

我刚开始在Java中使用steams,我发现我的问题至少与之前提出的问题有所不同。这里是我在这个时刻的代码片段(代码更像是一个概念证明):


如果在读取文件中的最后字节时遇到文件结尾(EOF),则会出现“爆炸”。例如,如果我试图读取80个字节,只剩下10个。

的返回值告诉您读取的字节数。这将是从
.read()
返回的值,是否总是读取的字节数?在第一种情况下,即未经参数化的情况下,
abstract int.read()
(文档,),在我看来,作为读者,返回的数字是十进制形式(0到255)输入的一个字节的字节值。这应该在你的答案中指定吗(我是比较新的,所以我不知道)?我指的是
read(byte[],int,int)
,但
read(byte[])也是如此。简单的
read()
调用返回的值将是下一个字节(0-255)或-1,以指示EOF。
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;
    }
}
inputStream.read(byteArray, offset, 80)