001.什么是intS

  在数据计算中,最方便的是int,而使用其他类型往往不是很方便。

  例如:

byte b1 = 1;
byte b2 = 2;
byte b3 = b1 + b2; //!!error, (b1 + b2) return type is int.
因此,为了方便,在大多数流操作中使用的实际数据类型并不是byte,而是intS(unsigned type: 0 - 255),这些intS会被自动转换为byte。

  例如,java.io.InputStream 中的 read()方法返回“数据的下一个byte,如果是数据流尾则返回-1”。那么,如果数据流中取得的数是“-1”该怎么办?

public abstract int read( ) throws IOException
这里返回的int并不是byte(-128 - 127),而是unsigned byte(0 - 256),因此“-1”可以被很好的被区分开来。

  java.io.InputStream 中的 write()方法也类似:

public abstract void write(int b) throws IOException
这里的输入int的取值范围是0-255,如果输入大于255则数据被截断。

b = b & 0x000000FF;
同时,byte数组也被用于流操作。

public int read(byte[] data) throws IOException
public int read(byte[] data, int offset, int length) throws IOException

 

这里就会考虑到性能问题,或许一个8bit的byte和一个32bit的int性能差别不是很大,但是在较大的数组中,这个区别就很明显了。实际上,一个byte在java虚拟机中是32位,但是byte数组只占用需要的空间,java虚拟机会对byte数组特殊处理。

  

posted on 2010-12-12 22:31  杰克船长  阅读(315)  评论(0)    收藏  举报

导航