1. package cn.zhang.io;
  2.  
  3. import java.io.ByteArrayInputStream;
  4. import java.io.ByteArrayOutputStream;
  5. import java.io.File;
  6. import java.io.FileInputStream;
  7. import java.io.FileNotFoundException;
  8. import java.io.FileOutputStream;
  9. import java.io.IOException;
  10. import java.io.InputStream;
  11. import java.io.OutputStream;
  12.  
  13. /**
  14. * 文件读取到字节数组,再从字节数组读取到文件
  15. * 四个步骤
  16. * 1、创建源
  17. * 2、选择流
  18. * 3、操作
  19. * 4、释放资源
  20. * @author zhang
  21. *
  22. */
  23. public class IOTest10 {
  24. public static void main(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、FileInputStream
  35. * 操作:输入
  36. * 释放资源:需要释放
  37. * 程序到字节数组:
  38. * 源:内部维护,自动创建一个字节数组
  39. * 流:ByteArrayOutputStream,不能使用多态,使用ByteArrayOutputStream流中的toByteArray方法,返回字节数组
  40. * 操作:输出
  41. * 释放资源:不需要释放
  42. * 2)、结果是获得一个字节数组
  43. * @param filePath
  44. * @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. * 流:ByteInputStream
  88. * 操作:读入
  89. * 释放资源:不需要
  90. *2、程序写出到新的文件中
  91. * 源:传入的新文件目的地
  92. * 流:OutputStream FileOutputStream
  93. * 操作:写出
  94. * 释放资源:需要
  95. * @param src
  96. * @param filePath
  97. */
  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. }

IO流处理文件读取到字节数组,再从字节数组读取到文件,Java实现的更多相关文章

  1. Java基础知识强化之IO流笔记27:FileInputStream读取数据一次一个字节数组byte[ ]

    1. FileInputStream读取数据一次一个字节数组byte[ ]  使用FileInputStream一次读取一个字节数组: int read(byte[]  b) 返回值:返回值其实是实际 ...

  2. Java IO流操作(III)——File类&案例一:输出制定目录下所有java文件名(包含子目录)&案例二:删除指定的目录(包含子目录)

    1. File常用的构造 File file = new File("字符串路径"); File f = new File("D:\\a\\b.txt"); F ...

  3. Android—Socket中关闭IO流后导致Socket关闭不能再收发数据的解决办法

    以Socket发送数据为例: 发送数据时候要声明:DataOutputStream os = new DataOutputStream(socket.getOutputStream()); 最近开发遇 ...

  4. File类的特点?如何创建File类对象?Java中如何操作文件内容,什么是Io流Io流如何读取和写入文件?字节缓冲流使用原则?

    重难点提示 学习目标 1.能够了解File类的特点(存在的意义,构造方法,常见方法) 2.能够了解什么是IO流以及分类(IO流的概述以及分类) 3.能够掌握字节输出流的使用(继承体系结构介绍以及常见的 ...

  5. Java基础IO流 ,文件读取,由易至难

    最基础的读取文件 import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;imp ...

  6. Java中IO流文件读取、写入和复制

    //构造文件File类 File f=new File(fileName); //判断是否为目录 f.isDirectory(); //获取目录下的文件名 String[] fileName=f.li ...

  7. [19/04/01-星期一] IO技术_字节流分类总结(含字节数组(Array)流、字节数据(Data)流、字节对象(Object)流)

    一.字节流分类概括 -->1.ByteArrayInputStream /ByteArrayOutputStream(数组字节输入输出)        InputStream/OutputStr ...

  8. 文件和IO流

    摘要:本文主要介绍了Java的文件处理以及常用的IO流操作. 文件操作 概念 File是数据源(保存数据的地方)的一种,可以表示一个文件,也可以表示一个文件目录. File类只能对文件和文件夹进行创建 ...

  9. Java 基础(四)| IO 流之使用文件流的正确姿势

    为跳槽面试做准备,今天开始进入 Java 基础的复习.希望基础不好的同学看完这篇文章,能掌握泛型,而基础好的同学权当复习,希望看完这篇文章能够起一点你的青涩记忆. 一.什么是 IO 流? 想象一个场景 ...

随机推荐

  1. 吴裕雄--天生自然java开发常用类库学习笔记:观察者设计模式

    import java.util.* ; class House extends Observable{ // 表示房子可以被观察 private float price ;// 价钱 public ...

  2. 完整版excel上传导入读写批量数据并将反馈结果写入远程exel中

    思路:excel的读写借助于poi框架,在写入远程的时候,是不能直接写入的,本博主将传入的文件再次拉下来写到项目临时文件中,然后,在临时文件中写入,然后,以同样的名称路径覆盖掉远程的就可以了,稍微有点 ...

  3. Java8系列 (四) 静态方法和默认方法(转载)

    静态方法和默认方法 我们可以在 Comparator 接口的源码中, 看到大量类似下面这样的方法声明 //default关键字修饰的默认方法 default Comparator<T> t ...

  4. 【LeetCode】反转字符串

    [问题] 编写一个函数,其作用是将输入的字符串反转过来. 示例 : 输入: "hello" 输出: "olleh" 示例 : 输入: "A man, ...

  5. bzoj 3522: [Poi2014]Hotel

    呵呵,一开始天真的我以为求个 西格玛 C(??,3)就好了.. (题解:比枚举2个数的再多一个,,一样搞) #include <bits/stdc++.h> #define LL long ...

  6. 082-PHP的do-while循环break跳出

    <?php $i = 1; do { echo $i; $i = $i + 1; if ($i >= 5) { echo "break<br>"; brea ...

  7. 关于C#设计SQllite

    使用3.5框架+System.Data.SQLite,System.Data.SQLite.Ling+SQLite.Designer三个dll

  8. 一、REACT概述

    1.前端/react概述 <从零react> 1.前端工 程概述 Web跨平台.跨浏览 器的应用开发场景 网页浏览器(Web Browser) 通过 CLI 指令去操作的 Headless ...

  9. windows2000 堆溢出 利用原理

    源于0day安全一书 1.堆的分配原理 申请堆空间   HANDLE address =  HeapCreate(0,0x1000,0x10000) address就是堆的地址 在address+0x ...

  10. Docker 网络详解及 pipework 源码解读与实践

    转载自:https://www.infoq.cn/article/docker-network-and-pipework-open-source-explanation-practice/ Docke ...