public void write(byte[] b,
                  int off,
                  int len)

public void write(int b)
这是ByteArrayOutputStream的一个单参数方法
我不太明白,既然是要写入的是一个字节,为什么不是public void write(byte b),因为int4个字节,相当于是长度为4byte[].而且据我了解,只有套了DataOutputStream以后才能些入long,int型的数据.

 

 

JDK说明:
将指定的字节写入此输出流。write 的常规协定是:向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 24 个高位将被忽略。

其实就是写入一个byteOutputStream的方法,还有InputStreamread返回也是intJava就这么设计的,好像是处于一个编程习惯,实际上就是一个byte

 

public class ByteArrayOutputStream

extends OutputStream

此类实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() toString() 获取数据。

关闭 ByteArrayOutputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException

public void write(int b)

将指定的字节写入此 byte 数组输出流。

public void write(byte[] b,

                  int off,

                  int len)

将指定 byte 数组(b)中从偏移量 off 开始的 len 个字节写入此 byte 数组输出流。

ByteArrayOutputStream类是在创建它的实例时,程序内部创建一个byte型数组的缓冲区,然后利用ByteArrayOutputStream和ByteArrayInputStream的实例向数组中写入或读出byte型数据。在网络传输中我们往往要传输很多变量,我们可以利用ByteArrayOutputStream把所有的变量收集到一起,然后一次性把数据发送出去。具体用法如下:

ByteArrayOutputStream:  可以捕获内存缓冲区的数据,转换成字节数组。

ByteArrayInputStream: 可以将字节数组转化为输入流

  1. public class Test { 
  2.     public static void main(String[] args) { 
  3.         int a = 0
  4.         int b = -3; 
  5.         int c = 2
  6.         ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
  7.         bos.write(a); 
  8.         bos.write(b); 
  9.         bos.write(c); 
  10.         byte[] buf = bos.toByteArray(); 
  11.         for(int i=0; i<buf.length; i++){ 
  12.             System.out.println(buf[i]); 
  13.         } 
  14.         System.out.println("*******************"); 
  15.         ByteArrayInputStream bis = new ByteArrayInputStream(buf); 
  16.         //public int read()从此输入流中读取下一个数据字节。返回一个 0 到 255 范围内的 int 字节值。
  17. //如果因为到达流末尾而没有可用的字节,则返回值 -1。  
  18.         //此 read 方法不会阻塞。 b=-3,因为read 返回的是一个0-255范围内的数据,这里返回253 
  19.         while((b = bis.read())!= -1){ 
  20.             System.out.println(b); 
  21.         } 
  22.     } 

public int read()

从此输入流中读取下一个数据字节。返回一个 0 255 范围内的 int 字节值。如果因为到达流末尾而没有可用的字节,则返回值 -1

read 方法不会阻塞。

public void write(int b)

将指定的字节写入此 byte 数组输出流。

ByteArrayInputStream 读取的是下一个字节数据。返回的是一个0-255 范围内的int字节值。写的也是一个字节,虽然参数是int,但是一个int4个字节,写的是低八位。如果想写或读 整数,浮点数,数组 可以借助DataOutputStream(数据输出流/数据输入流)完成!!

  1. public class Test {  
  2.         public static void main(String[] args) throws IOException {  
  3.             int a = -1;  
  4.             float b = -3f;  
  5.             String str = "hello"
  6.             ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
  7.             DataOutputStream dos = new DataOutputStream(bos); 
  8.             dos.writeInt(a); 
  9.             dos.writeFloat(b); 
  10.             dos.writeUTF(str); 
  11.             //a,b,str在字节数组中的保存数据为:
  12. // [-1, -1, -1, -1, -64, 64, 0, 0, 0, 5, 104, 101, 108, 108, 111] 
  13.             byte[] buf = bos.toByteArray();  
  14.             for(int i=0; i<buf.length; i++){  
  15.                 System.out.println(buf[i]);  
  16.             }  
  17.             System.out.println("*******************");  
  18.             ByteArrayInputStream bis = new ByteArrayInputStream(buf);  
  19.             //public int read()从此输入流中读取下一个数据字节。返回一个 0 到 255 范围内的 int 字节值。 
  20.     //如果因为到达流末尾而没有可用的字节,则返回值 -1。   
  21.             //此 read 方法不会阻塞。 b=-3,因为read 返回的是一个0-255范围内的数据,这里返回253 
  22.             //255.0,255.0,255.0,255.0,192.0,64.0,0.0,0.0,0.0,5.0,104.0,101.0,108.0,108.0,111.0, 
  23.             while((b = bis.read())!= -1){  
  24.                 System.out.print(b+",");  
  25.             }  
  26.         }  
  27.     }  

为了正确读取数据用 DataInputStream 完成:

  1. public class Test {  
  2.         public static void main(String[] args) throws IOException {  
  3.             int a = -1;  
  4.             float b = -3f;  
  5.             String str = "hello"
  6.             ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
  7.             DataOutputStream dos = new DataOutputStream(bos); 
  8.             dos.writeInt(a); 
  9.             dos.writeFloat(b); 
  10.             dos.writeUTF(str); 
  11.             //a,b,str在字节数组中的保存数据为:
  12. // [-1, -1, -1, -1, -64, 64, 0, 0, 0, 5, 104, 101, 108, 108, 111] 
  13.             byte[] buf = bos.toByteArray();  
  14.             for(int i=0; i<buf.length; i++){  
  15.                 System.out.println(buf[i]);  
  16.             }  
  17.             System.out.println("*******************");  
  18.             ByteArrayInputStream bis = new ByteArrayInputStream(buf);  
  19.             DataInputStream dis = new DataInputStream(bis); 
  20.             System.out.println(dis.readInt()); 
  21.             System.out.println(dis.readFloat()); 
  22.             System.out.println(dis.readUTF()); 
  23.         }  
  24.     }