Java 为什么“的价值”;fileInputStream.read();要换吗?
我想只有I的值被更改了,但是为什么它是fileInputStream.read() //结果是255Java 为什么“的价值”;fileInputStream.read();要换吗?,java,io,myeclipse,Java,Io,Myeclipse,我想只有I的值被更改了,但是为什么它是fileInputStream.read() //结果是255 import java.io.*; public class FileStream_byte1 { public static void main(String[] args) throws IOException { FileOutputStream fOutputStream = new FileOutputStream("FileStream_byte1.txt");
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您可以通过阅读文档,引用 " public int read()引发IOException。它从此输入流中读取一个字节的数据。如果没有可用的输入,此方法将阻止。由以下指定: 读入类InputStream。返回:数据的下一个字节,如果 到达文件结尾。抛出:IOException-如果I/O错误 发生 " 它返回-1,因为它到达了文件的末尾。
在while循环中,它读取您写入的数据字节,不打印任何内容,然后下次尝试读取一个字节的数据时,没有任何内容,因此它返回-1,并且由于它与您的条件相匹配,它将打印它,然后退出子例程(在第一种情况下,您读取
255
)尽管编写了-1
,但可以在(emphasis矿山)的文档中看到:
将指定的字节写入此输出流。write
的一般约定是将一个字节写入输出流要写入的字节是参数b
的八个低位。b
的24个高位被忽略。
没有改变这种行为的迹象
基本上,InputStream.read
和OutputStream.write(int)
使用int
s允许使用无符号的“字节”。他们都希望int
在0
-255
的范围内(一个字节的范围)。因此,当您调用write(-1)
时,它将只写入-1
的“八个低位”,这将导致将255
写入文件
在第二种情况下得到
-1
的原因是调用read
两次,但文件中只有一个字节,并且打印第二次读取的结果
从(emphasismine)的文档中:
从输入流读取数据的下一个字节。值字节作为int
返回,范围为0
到255
如果由于到达流的结尾而没有可用的字节,则返回值-1
。此方法阻止,直到输入数据可用、检测到流的结尾或引发异常
在您的代码中,您将调用
read
两次,第一次它将返回255
,然后下一次-1
指示流结束
试一试
第一个代码段中是否应该有类似于第二个代码段的
while
循环?在写入/读取文件之前,文件中是否有其他文本?我不知道,但我想知道的是“I=fileInputStream.read()”只更改了I的值,不是吗?同样的一点是它们都是打印的(“+fileInputStream.read()”),您只是想知道为什么第二个示例的结果是-1
?或者,您是否也想知道为什么第一个示例的结果是255
,即使您将-1
写入文件?while循环是否每次都更改read()的值?我认为read()的值是一个常数。请做下面的任何一个答案来回答你的问题。如果是这样,请考虑进行投票和/或接受,每次执行while循环时,读()的值被改变,直到文件的所有数据都被读取,同时它的值已经被改变为-1;while循环只执行了两次。首先读取写入的数字的字节,因此i=255,然后尝试读取,但在文件中找不到任何内容,因此i=-1。您编写了-1,但程序读取255是因为它不读取数字,而是读取字节数据,如果您不知道它们之间的区别,可以使用搜索来查找有关该主题的更多答案。第一次读取()是255,第二次是-1,不是吗?如果-1表示流已结束,255表示什么?我从不将255输入到文件中……查看JavaDoc并考虑<代码>字节B=1;System.out.println(“+(b&0xFF))代码>
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();
}
}
while ((i = fileInputStream.read()) != -1)
System.out.println(" " + i);