java流 按字节数组读取_IO流处理文件读取到字节数组,再从字节数组读取到文件,Java实现...

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 = baos.toByteArray();//最终获得的字节数组

64 return dest;//返回baos在内存中所形成的字节数组

65 } catch(FileNotFoundException e) {66 e.printStackTrace();67 } catch(IOException e) {68 e.printStackTrace();69 }finally{70 //释放资源,文件需要关闭,字节数组流无需关闭

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 }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值