python接收java处理后的⽂件字节流_IO流处理⽂件读取到字节数组,再从字节数组读取。。。
1 packagecn.zhang.io;2
3 importjava.io.ByteArrayInputStream;
4 importjava.io.ByteArrayOutputStream;
5 importjava.io.File;6
importjava.io.FileInputStream;7 importjava.io.FileNotFoundException;8 importjava.io.FileOutputStream;9
importjava.io.IOException;10 importjava.io.InputStream;11 importjava.io.OutputStream;12
13 /**
14 * ⽂件读取到字节数组,再从字节数组读取到⽂件15 * 四个步骤16 * 1、创建源17 * 2、选择流18 * 3、操作19 * 4、释放资源20
*@authorzhang21 *22 */
23 public classIOTest10 {24 public static voidmain(String[] args) {25 //指定⽂件源,获得该⽂件的字节数组
26 byte[] datas = fileToByteArray("very_nice_satellite_images_of_iran-wallpaper-2880x1620.jpg");//图⽚转为字节数组
27 byteArrayToFile(datas,"picture.jpg");//字节数组转为图⽚
28 }29
30 /**
31 * 1、⽂件读取到字节数组,以程序为中⼼32 * 1)、⽂件到程序:33 * 源:main⽅法中34 * 流:InputStream、FileInputStream35 * 操作:输⼊36 * 释放资源:需要释放37 * 程序到字节数组:38 * 源:内部维护,⾃动创建⼀个字节数组39 * 流:ByteArrayOutputStream,不能使⽤多态,使⽤ByteArrayOutputStream流中的toByteArray⽅法,返回字节数组40 * 操作:输出41 *释放资源:不需要释放42 * 2)、结果是获得⼀个字节数组43 *@paramfilePath44 *@return
45 */
46 public static byte[] fileToByteArray(String filePath) {47 //创建源与⽬的地
48 File src = new File(filePath);//获得⽂件的源头,从哪开始传⼊(源)
49 byte[] dest = null;//最后在内存中形成的字节数组(⽬的地)50 //选择流
51 InputStream is = null;//此流是⽂件到程序的输⼊流
52 ByteArrayOutputStream baos= null;//此流是程序到新⽂件的输出流53 //操作(输⼊操作)
54 try{55 is = new FileInputStream(src);//⽂件输⼊流
56 baos = new ByteArrayOutputStream();//字节输出流,不需要指定⽂件,内存中存在
57 byte[] flush = new byte[1024*10];//设置缓冲,这样便于传输,⼤⼤提⾼传输效率
58 int len = -1;//设置每次传输的个数,若没有缓冲的数据⼤,则返回剩下的数据,没有数据返回-1
59 while((len = is.read(flush)) != -1) {60 baos.write(flush,0,len);//每次读取len长度数据后,将其写出
61 }62 baos.flush();//刷新管道数据
63 dest = ByteArray();//最终获得的字节数组
64 return dest;//返回baos在内存中所形成的字节数组
65 } catch(FileNotFoundException e) {66 e.printStackTrace();67 } catch(IOException e) {68 e.printStackTrace();69
}finally{70 //释放资源,⽂件需要关闭,字节数组流⽆需关闭
python转java代码71 if(null !=is) {72 try{73 is.close();74 } catch(IOException e) {75 e.printStackTrace();76 }77 }78
79 }80 return null;81 }82
83 /**
84 * 字节数组写出到新的⽂件85 *1、字节数组读⼊程序中86 * 源:传⼊的字节数组87 * 流:ByteInputStream88 * 操作:读⼊89 * 释放资源:不需要90 *2、程序写出到新的⽂件中91 * 源:传⼊的新⽂件⽬的地92 * 流:OutputStream FileOutputStream93 * 操作:写出94 * 释放资源:需要95 *@paramsrc96 *@paramfilePath97 */
98 public static void byteArrayToFile(byte[] src,String filePath) {99 //创建源
100 File dest = new File(filePath);//⽬的地,新⽂件101 //src字节数组已经存在102 //选择流
103 InputStream is = null;//ByteArrayInputStream的⽗类
104 OutputStream os = null;105 //操作
106 try{107 is = new ByteArrayInputStream(src);//字节数组与程序之间的管道
108 os = new FileOutputStream(dest);//程序与新⽂件之间的管道109 //⼀样的字节数组缓冲操作
110 byte[] flush = new byte[1024*10];111 int len = -1;112 while((len = is.read(flush)) != -1) {113 os.write(flush,0,len);114 }115 os.flush();116 } catch(FileNotFoundException e) {117 e.printStackTrace();118 } catch(IOException e) {119
e.printStackTrace();120 }finally{121 if(null != os) {//关闭⽂件流
122 try{123 os.close();124 } catch(IOException e) {125 e.printStackTrace();126 }127 }128 }129 }130 }
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论