字节数组流输于缓冲流,放在jvm内存中,java可以直接操作。我们使用时可以不用关闭,交给GC垃圾回收机制处理、

当然我们为了保持良好习惯和代码一致性也可以加上关闭语句。

  1. 当其实我么打开ByteArrayInputStream ByteArrayOutputStream 源码可以发现字节数组里的colse() 方法是个空方法:
  1. /**
  2. * Closing a <tt>ByteArrayInputStream</tt> has no effect. The methods in
  3. * this class can be called after the stream has been closed without
  4. * generating an <tt>IOException</tt>.
  5. */
  6. public void close() throws IOException {
  7. }

所以我们在使用时关闭不关闭都不影响

接下来我们来写一段代码实现:

文件–> 程序–>字节数组流–>程序—>文件 的操作:

  1. package com.xzlf.io;
  2. import java.io.ByteArrayInputStream;
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. /**
  9. * 1、图片读取到字节数组
  10. * 2、字节数组读取到文件
  11. * @author xzlf
  12. *
  13. */
  14. public class IOTest03 {
  15. public static void main(String[] args) {
  16. // 图片到字节数组
  17. byte[] datas = fileToByteArray("src/1.jpg");
  18. System.out.println(datas.length);
  19. // 字节数组到图片
  20. byteArrayToFile(datas, "src/1-byte.jpg");
  21. }
  22. /**
  23. * 图片读取到字节数组
  24. * 1、图片到程序 FileInputStream
  25. * 2、程序到字节数组 ByteArrayOutputStream
  26. * @param filePath
  27. * @return
  28. */
  29. public static byte[] fileToByteArray(String filePath) {
  30. // 1、创建源
  31. File src = new File(filePath);
  32. // 2、选择流
  33. FileInputStream is = null;
  34. ByteArrayOutputStream bos = null;
  35. try {
  36. is = new FileInputStream(src);
  37. bos = new ByteArrayOutputStream();
  38. byte[] flush = new byte[1024];// 缓冲容器
  39. int len = -1;
  40. // 3、操作(分段读取)
  41. while((len = is.read(flush)) != -1) {
  42. bos.write(flush, 0, len);// 写出到字节数组
  43. }
  44. bos.flush();
  45. return bos.toByteArray();
  46. } catch (Exception e) {
  47. e.printStackTrace();
  48. }finally {
  49. // 4、释放资源
  50. try {
  51. if(is != null) {
  52. is.close();
  53. }
  54. } catch (IOException e) {
  55. e.printStackTrace();
  56. }
  57. }
  58. return null;
  59. }
  60. /**
  61. * 字节数组写出到图片
  62. * 1、字节数组到程序 FileInputStream
  63. * 2、程序到图片 ByteArrayOutputStream
  64. * @param filePath
  65. * @return
  66. */
  67. public static void byteArrayToFile(byte[] src, String filePath) {
  68. // 1、创建源
  69. File dest = new File(filePath);
  70. // 2、选择流
  71. FileOutputStream os = null;
  72. ByteArrayInputStream bis = null;
  73. try {
  74. os = new FileOutputStream(dest);
  75. bis = new ByteArrayInputStream(src);
  76. byte[] flush = new byte[1024*10];// 缓冲容器
  77. int len = -1;
  78. // 3、操作(分段读取)
  79. while((len = bis.read(flush)) != -1) {
  80. os.write(flush, 0, len);// 写出到文件
  81. }
  82. os.flush();
  83. } catch (Exception e) {
  84. e.printStackTrace();
  85. }finally {
  86. // 4、释放资源
  87. try {
  88. if(os != null) {
  89. os.close();
  90. }
  91. } catch (IOException e) {
  92. e.printStackTrace();
  93. }
  94. }
  95. }
  96. }

运行测试:

其实很简单,大家可以拿到自己电脑上测试一下。

Java IO 流-- 字节数组流ByteArrayInPutStream ByteArrayOutPutStream的更多相关文章

  1. 系统学习 Java IO (七)----字节数组流 ByteArrayInputStream/ByteArrayOutputStream

    目录:系统学习 Java IO---- 目录,概览 ByteArrayInputStream 如果数据存储在数组中,ByteArrayInputStream 可以很方便读取,它可以返回 InputSt ...

  2. Java I/O第二篇 之 (缓冲流 随机流 数组流 数据流)

    1:缓冲流 BufferedReader  BufferedWriter 具有较强的读写能力,能单独读写一行数据,能够减少对硬盘的访问次数. /** * 缓冲流 能够增强对问价数据的可读性,减少访问读 ...

  3. Java:IO流其他类(字节数组流、字符数组流、数据流、打印流、Properities、对象流、管道流、随机访问、序列流、字符串读写流)

    一.字节数组流: 类 ByteArrayInputStream:在构造函数的时候,需要接受数据源,而且数据源是一个字节数组. 包含一个内部缓冲区,该缓冲区包含从流中读取的字节.内部计数器跟踪 read ...

  4. Java IO学习笔记(三)转换流、数据流、字节数组流

    转换流 1.转换流:将字节流转换成字符流,转换之后就可以一个字符一个字符的往程序写内容了,并且可以调用字符节点流的write(String s)方法,还可以在外面套用BufferedReader()和 ...

  5. JAVA IO分析二:字节数组流、基本数据&对象类型的数据流、打印流

    上一节,我们分析了常见的节点流(FileInputStream/FileOutputStream  FileReader/FileWrite)和常见的处理流(BufferedInputStream/B ...

  6. Java基础IO类之字节数组流

    package IODemo; //字节数组流 :内部维护这着一个字节数组,我们可以利用流的读取机制来处理字符串 无需关闭,不会报IO异常 // ByteArrayInputstream ByteAr ...

  7. Java文件与io——字节数组流数据流字符串流

    字节数组流 ByteArrayInputStream:包含一个内部缓冲区,该缓冲区包含从流中读取的字节.内部计数器跟踪read方法要提供的下一个字节.关闭ByteArrayInputStream无效. ...

  8. IO知识点整理(序列化,管道流,数据流,字节数组流,与编码)

    一:序列化的问题 1.序列号的使用问题 关于在序列化中的序列号的使用问题,一般要是使用. 因为,每次要序列化的类产生都会产生一个一个新的序列号,如果将这个类的程序修改后,就会产生新的序列号,以前序列化 ...

  9. 6.5(java学习笔记)其他流(字节数组流,数据流,对象流,打印流)

    一.字节数组流 之前使用输入输出流的操作的对象是文件,而这里字节数组流操作的对象是内存,内存可以看做是一个字节数组. 使用字节数组流读写就可以看做是从内存A到内存B的读写,对象时内存即字节数组. 1. ...

随机推荐

  1. jmeter参数化之函数助手(十五)

    jmeter-参数化: 参数化的作用:调用接口入参时.有时要求参数经常变化,如果每次去修改就会变得很繁琐,这时候就需要把经常变化的值改变为提前编辑好的文档或函数中,便于调用时使用不同的值. Jmete ...

  2. python之常用模块ConfigParser

    这个常见于.conf,.ini等类型的配置文件 下面先看一下如果通过python生成一个.ini文件 import configparser #2.x is ConfigParserconfig = ...

  3. 二分搜索树(Binary Search Tree)

    目录 什么是二叉树? 什么是二分搜索树? 二分搜索树的基本操作 二分搜索树添加新元素 二分搜索树的遍历(包含非递归实现) 删除二分搜索树中的元素 什么是二叉树?   在实现二分搜索树之前,我们先思考一 ...

  4. D - 淡黄的长裙 HDU - 4221(贪心)

    D - 淡黄的长裙 HDU - 4221(贪心) James is almost mad! Currently, he was assigned a lot of works to do, so ma ...

  5. hello world: 我的博客写作思路

    1. 本人计算机专业,研究生刚毕业,即将入职金融科技领域,决定借博客园平台写自己的博客,原因如下: 从小白到大白,离不开各大学习平台和技术博客的指导和分享,是时候回馈了. 借此机会整理自己从本科.研究 ...

  6. jsbrage——和app交互

      <html> <head> <meta content="text/html; charset=utf-8" http-equiv="c ...

  7. 【php】面向对象(五)

    一. 类型约束: a) 约束函数可传入的参数类型二. 类的遍历 a) Foreach b) 可以将类当中的所有成员属性遍历出来三. 关于操作类与对象的一些函数: a) 判断函数 i. Function ...

  8. python工业互联网监控项目实战2—OPC

    OPC(OLE for Process Control)定义:指为了给工业控制系统应用程序之间的通信建立一个接口标准,在工业控制设备与控制软件之间建立统一的数据存取规范.它给工业控制领域提供了一种标准 ...

  9. System.out.println()的真实含义

    每一个人的Java学习之路上恐怕都是用以下代码开始的吧? public class Test { public static void main(String[] args) { System.out ...

  10. python3(五) if

    age = 20 if age >= 18: print('your age is', age) print('adult') # 如果if语句判断是True,就把缩进的两行print语句执行了 ...