1.字节数组流
输出流:ByteArrayOutputStream bos=new ByteArrayOutputStream();
由于输出流有新增方法,所以这里不可以使用多态
输入流:ByteArrayInputStream bis=new ByteArrayInputStream(destByte);
InputStream bis=new BufferedInputStream(new ByteArrayInputStream(destByte));
2.文件拷贝
之前使用节点流中的字节流进行文件的拷贝,利用字符流进行纯文本文件的拷贝,也可以使用处理流中的字节缓冲流与字符缓冲流进行文件/文本文件的拷贝,为了将字节数组流与之前的节点流联系在一起,这里利用字节数组流做中转站,实现文件的拷贝。
步骤一:利用文件输入流读取到被拷贝文件的数据,利用字节数组输出流保存在字节数组中
步骤二:利用字节数组输入流以及文件输出流,将数据写出到目的文件中。
代码:
public class ByteArrayDemo02 {
public static void main(String[] args) throws IOException {
byte[] data =getBytesFromFile("F:/Picture/test/test.txt");
toFileFromByteArray(data,"F:/Picture/test/test2.txt");
}
/**
* 2、字节数组 --程序->文件
*/
public static void toFileFromByteArray(byte[] src,String destPath) throws IOException{
//目的地
File dest=new File(destPath);
//选择流,字节数组输入流,文件输出流
InputStream is =new BufferedInputStream(new ByteArrayInputStream(src));
OutputStream os =new BufferedOutputStream(new FileOutputStream(dest));
//操作 不断读取字节数组
byte[] flush =new byte[1];
int len =0;
while(-1!=(len =is.read(flush))){
//写出到文件中
os.write(flush, 0, len);
}
os.flush();
//释放资源
os.close();
is.close();
}
/**
* 1、文件 --程序->字节数组
* @return
* @throws IOException
*/
public static byte[] getBytesFromFile(String srcPath) throws IOException{
//创建文件源
File src =new File(srcPath);
//创建字节数组目的地
byte[] dest =null;
//选择流,文件输入流 ,字节数组输出流 不能使用多态
InputStream is =new BufferedInputStream(new FileInputStream(src));
ByteArrayOutputStream bos =new ByteArrayOutputStream();
//操作 不断读取文件 写出到字节数组流中
byte[] flush =new byte[1024];
int len =0;
while(-1!=(len =is.read(flush))){
//写出到字节数组流中
bos.write(flush, 0, len);
}
bos.flush();
//获取数据
dest =bos.toByteArray();
bos.close();
is.close();
return dest;
}
}
上面的代码将步骤1,2分为两个方法,如果不分开,如下面代码,拷贝不成功,原因不明
public class Demo08 {
public static void main(String[] args) throws IOException {
//文件源,以及文件目的地
File src=new File("F:/Picture/test/test.txt");
File dest=new File("F:/Picture/test/test2.txt");
//字节数组,中转站
byte[] destByte=new byte[1024];
//选择文件流
InputStream is=new BufferedInputStream(new FileInputStream(src));
OutputStream os=new BufferedOutputStream(new FileOutputStream(dest));
//选择字节数组流
ByteArrayOutputStream bos=new ByteArrayOutputStream();
InputStream bis=new BufferedInputStream(new ByteArrayInputStream(destByte));
/**
* 开始从文件中读取数据到字节数组中
*/
byte[] flush=new byte[1024];
int len=0;
while(-1!=(len=is.read(flush))){
bos.write(flush, 0, len);
}
bos.flush();
//获取数据
destByte=bos.toByteArray();
/**
* 从字节数组中读取到目的文件中
*/
byte[] flush2 =new byte[1024];
int len2 =0;
while(-1!=(len2 =bis.read(flush2))){
//写出到文件中
os.write(flush2, 0, len2);
}
os.flush();
bis.close();
os.close();
bos.close();
is.close();
}
}