字节数组输入流 ByteArrayInputStream

     ByteArrayInputSteam类从内存中的字节数组中读取数据,因此它的数据源是一个字节数组。这个类的构造方法包括: 
     ByteArrayInputStream(byte[] buf)--------参数buf指定字节数组类型的数据源。 
     ByteArrayInputStream(byte[] buf, int offset, int lenght)-----参数buf指定字节数组类型数据源,参数offset指定从数组中开始读取数据的起始下标位置,lenght指定从数组中读取的字节数。 
    ByteArrayInputStream类本身采用了适配器设计模式,它把字节数组类型转换为输入流类型,使得程序能够对字节数组进行读操作。 
     下面这个ByteArrayTester类演示了 ByteArrayInputStream的用法。 
Java代码   收藏代码
  1. package xiaohang.com;  
  2.   
  3. import java.io.ByteArrayInputStream;  
  4. import java.io.IOException;  
  5.   
  6. public class ByteArrayTester {  
  7.     public static void main(String[] args) throws IOException {  
  8.         byte[] buff = new byte[] { 21567, -1, -99 };  
  9.         ByteArrayInputStream in = new ByteArrayInputStream(buff, 14);  
  10.         int data = in.read();  
  11.         while (data != -1) {  
  12.             System.out.println(data + " ");  
  13.             data = in.read();  
  14.         }  
  15.         in.close();// ByteArrayInputSystem 的close()方法实际上不执行任何操作  
  16.     }  
  17. }  


   以上字节数组输入流从字节数组buff的下标为1的元素开始读,一共读取4个元素。对于读到的每一个字节类型的元素,都会转换为int类型。 
    例如:对于字节类型的15,二进制形式为00001111,转换为int类型的二进制形式为 
00000000 00000000 00000000 00001111,因此字节类型的15 转换为int类型仍然是15;对于字节类型的-1,二进制形式为 11111111,转换为int类型的二进制形式为 
00000000 00000000 00000000 11111111 ,因此字节类型的-1 转换为int类型是255;对于字节类型的-9,二进制形式为 11110111, 转换为int类型的二进制形式为 00000000 00000000 00000000 11110111, 因此字节类型的-9转换为 int类型是 247。 

   以上字节数组输入流在读取了4个字节后,就达到了输入流的末尾,在执行read()方法,就会返回-1。以上程序的打印结果为: 

字节数组输入流 ByteArrayInputStream 

   需要指出的是,这里所说的把byte类型转换为int类型,与赋值运算中的类型转换是两回事。在赋值运算中,把byte类型赋给int类型,取值不变,例如:: 
Java代码   收藏代码
  1. byte b1=15,b2=-1,b3=-9  
  2. int a1=b1,a2=b2,a3=b3; //a1 a2 a3 的取值分别为15, -1和-9  

你可能感兴趣的:(java)