在文件demo2中写入50, -54, 0, -1
public void testWrite() throws Exception{
RandomAccessFile raf=new RandomAccessFile("demo2.dat","rw");
byte[] buf={50, -54, 0, -1};
raf.write(buf);
System.out.println(raf.getFilePointer());
raf.close();
}
下面进行读操作
public void testRead() throws Exception{
RandomAccessFile raf=new RandomAccessFile("demo2.dat", "r");
byte [] buf=new byte[4];
raf.read(buf);
for(byte b:buf)
System.out.println(b);
raf.close();
}
-1读出来的仍是-1,但是
public void testFileOut() throws Exception{
//使用文件输出流写文件
FileOutputStream out=new FileOutputStream("out.dat");
out.write(50);
out.write(89);
byte[] buf={50,-1,60};
out.write(buf);
out.close();
}
使用文件输入流读取文件
public void testFileIn() throws Exception{
//使用文件输入流读取文件
FileInputStream in=new FileInputStream("out.dat");
int b;
while ((b=in.read())!=-1){
System.out.println(b);
}
in.close();
}
-1读出的是255
两种写操作都用到了byte[ ],为何对-1读出的结果不一样?
求教大神!
------解决方案--------------------
你自己不会看API文档说明吗。。
in.read()返回的是int值,范围在-1~255,返回-1表示文件结束,其他的表示文件数据,当读入的是负数时,转换为其无符号类型对应的正数,-1对应的是0xFF,也就是255
而raf.read(buf)直接读入buf数组,buf数组是byte类型的,而byte的范围是-128~127,当然能直接表示-1
------解决方案--------------------
+1
其实单纯一个字节本身没所谓正负,只是8个bit。8个电子/磁/光....的256种组合,你管他叫第256个字节(1开始数,第一个是0/NUL/'\0'/ 随便你叫什么....),-1也好,0xFF也好,都只代表8个bit1。只不过在Java IO处理的时候,使用了非负的int
也就是int 0,代表第一个(8个0bit),int 255,代表最后一个(8个1bit)。而-1特殊含义,不表示任何字节,只表示文件结束。