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(); } }