byte[]和InputStream的相互转换

Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。Java中其他多种多样变化的流均是由它们派生出来的:

 

在这四个抽象类中,InputStream和Reader定义了完全相同的接口:

 

int read()
int read(char cbuf[])
int read(char cbuf[], int offset, int length)

 

  而OutputStream和Writer也是如此:

 

int write(int c)
int write(char cbuf[])
int write(char cbuf[], int offset, int length)

 

这六个方法都是最基本的,read()和write()通过方法的重载来读写一个字节,或者一个字节数组。

1:byte[]转换为InputStream 
InputStream sbs = new ByteArrayInputStream(byte[] buf); 

2:InputStream转换为InputStreambyte[] 
ByteArrayOutputStream swapStream = new ByteArrayOutputStream(); 
byte[] buff = new byte[100]; //buff用于存放循环读取的临时数据 
int rc = 0; 
while ((rc = inStream.read(buff, 0, 100)) > 0) { 
swapStream.write(buff, 0, rc); 
} 
byte[] in_b = swapStream.toByteArray(); //in_b为转换之后的结果 

Java代码  收藏代码
  1. import java.io.ByteArrayInputStream;  
  2. import java.io.ByteArrayOutputStream;  
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5.   
  6. public class ByteToInputStream {  
  7.   
  8.     public static final InputStream byte2Input(byte[] buf) {  
  9.         return new ByteArrayInputStream(buf);  
  10.     }  
  11.   
  12.     public static final byte[] input2byte(InputStream inStream)  
  13.             throws IOException {  
  14.         ByteArrayOutputStream swapStream = new ByteArrayOutputStream();  
  15.         byte[] buff = new byte[100];  
  16.         int rc = 0;  
  17.         while ((rc = inStream.read(buff, 0100)) > 0) {  
  18.             swapStream.write(buff, 0, rc);  
  19.         }  
  20.         byte[] in2b = swapStream.toByteArray();  
  21.         return in2b;  
  22.     }  
  23.   
  24. }  
posted @ 2013-08-09 10:11  阿窟窿  阅读(2160)  评论(0编辑  收藏  举报