我认为仅更改了i的值,但为什么更改为fileInputStream.read()?
import java.io.*;
public class FileStream_byte1 {
public static void main(String[] args) throws IOException {
FileOutputStream fOutputStream = new FileOutputStream("FileStream_byte1.txt");
fOutputStream.write(-1);
fOutputStream.close();
FileInputStream fileInputStream = new FileInputStream("FileStream_byte1.txt");
int i;
System.out.println(" " + fileInputStream.read());
fileInputStream.close();
}
}
//结果是255
import java.io.*;
public class FileStream_byte1 {
public static void main(String[] args) throws IOException {
FileOutputStream fOutputStream = new FileOutputStream("FileStream_byte1.txt");
fOutputStream.write(-1);
fOutputStream.close();
FileInputStream fileInputStream = new FileInputStream("FileStream_byte1.txt");
int i ;
while ((i = fileInputStream.read()) != -1)
System.out.println(" " + fileInputStream.read());
fileInputStream.close();
}
}
//结果为-1
答案 0 :(得分:1)
在OutputStream.write(int)
的文档中可以看到尽管写了255
却仍然读-1
的原因(强调我的):< / p>
将指定的字节写入此输出流。
write
的一般约定是将一个字节写入输出流。 要写入的字节是参数b
的八个低位。b
的24个高位被忽略。
FileOutputStream
没有表明更改该行为。
基本上,InputStream.read
和OutputStream.write(int)
使用int
来允许使用 unsigned “字节”。他们俩都期望int
在0
-255
的范围内(一个字节的范围)。因此,当您调用write(-1)
时,它只会写入-1
的“低八位”,从而将255
写入文件。
在第二种情况下获得-1
的原因是因为您两次调用read
,但是文件中只有一个字节,所以您打印了第二次读取的结果。
摘自InputStream.read
的文档(我的重点是我的):
从输入流中读取下一个数据字节。值字节作为
int
返回,范围为0
至255
。 如果由于已到达流的末尾而没有字节可用,则返回值-1
。。此方法将阻塞直到输入数据可用,检测到流的末尾或引发异常。
答案 1 :(得分:0)
您可以阅读文档并引用
”
public int read()抛出IOException。它从此输入流中读取一个字节的数据。如果尚无输入可用,则此方法将阻塞。指定者: 读入InputStream类。 返回:下一个数据字节;如果返回,则返回-1。 抛出:IOException-如果发生I / O错误 发生。
”
它返回-1,因为它到达了文件的末尾。 在while循环中,它读取您写入的数据字节,不打印任何内容,然后在下次尝试读取数据字节时,没有内容,因此它返回-1,并且由于其符合您的条件,因此将打印继续退出子程序
答案 2 :(得分:0)
在您的代码中,您两次调用read
,第一次将返回255
,然后是下次-1
,表示流已结束
尝试
while ((i = fileInputStream.read()) != -1)
System.out.println(" " + i);