java中inputstream是所有字节输入流的父类,理解时要注意每次 read()的时候返回的都是一个 0~255的整数刚好代表了一个字节的意思。但是int是四位的,当我们强制转为byte的时候,由于java采取的是暴力的截断,因而只会取低位字节。因而这时byte(-128~127)就可能是负数了。当我们再有byte转位int的时候,这时候这个int可能就不等于read出来的int。例如:
int a = in.read();
byte b = (byte)a;
int c = b;
System.out.println(a);
System.out.println(b);
System.out.println(c);
如果读出来的a=255,那么结果是b=-1,c=-1,因而a会不等于c,可以如下处理得到的c会等于a
int c = (b >= 0) ? b : 256 + b;
当读取流是3个read方法有可能返回的是-1代表的是流结束的意思。要注意流结束和关闭流是代表不同的意义,而在window的窗口下用Ctrl-Z结束流,unix用Ctrl-D