ByteArrayInputStream和ByteArrayOutputStream经常用在需要流和数组之间转化的情况!
说白了,FileInputStream是把文件当做数据源。ByteArrayInputStream则是把内存中的”某个字节数组对象”当做数据源。
【示例】简单测试BytrayInputStream 的使用
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
public class TestByteArray {
//
public static void main(String[] args) {
byte[] src="talk is sheap show me the code".getBytes();
InputStream is=null;
try {
is = new ByteArrayInputStream(src);
byte[] flash = new byte[5];
int len = -1;
while ((len = is.read(flash)) != -1) {
String str = new String(flash, 0, len);
System.out.println(str);
}
} catch(IOException e){
e.printStackTrace();
}finally{
try {
if(null!=is)
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
【运行结果】
【示例】图片copy
import java.io.*;
/*
图片copy
*/
public class TestByteArrayCopy {
public static void main(String[] args) {
byte[] dates=fileToByteArray("p.png");
System.out.println(dates.length);
byteArrayToFile("p-byte3.png",dates);
}
public static byte[] fileToByteArray(String str){
File file=new File(str);
InputStream is=null;
ByteArrayOutputStream baos=null;
try {
is=new FileInputStream(file);
baos=new ByteArrayOutputStream();
byte[] flush=new byte[1024*10];
int len=-1;
while((len=is.read(flush))!=-1){
baos.write(flush,0,len);
}
baos.flush();
return baos.toByteArray();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally{
try {
if(null!=is)
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
public static void byteArrayToFile(String filePath,byte[] src){
File file=new File(filePath);
InputStream is=null;
OutputStream os=null;
try {
is=new ByteArrayInputStream(src);
os=new FileOutputStream(file);
byte[] flush=new byte[5];
int len=-1;
while((len=is.read(flush))!=-1){
os.write(flush,0,len);
}
os.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally {
try {
if(null!=os)
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}