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

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

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

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

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

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

package com.xzlf.io;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; /**
* 1、图片读取到字节数组
* 2、字节数组读取到文件
* @author xzlf
*
*/
public class IOTest03 { public static void main(String[] args) {
// 图片到字节数组
byte[] datas = fileToByteArray("src/1.jpg");
System.out.println(datas.length);
// 字节数组到图片
byteArrayToFile(datas, "src/1-byte.jpg");
} /**
* 图片读取到字节数组
* 1、图片到程序 FileInputStream
* 2、程序到字节数组 ByteArrayOutputStream
* @param filePath
* @return
*/
public static byte[] fileToByteArray(String filePath) {
// 1、创建源
File src = new File(filePath); // 2、选择流
FileInputStream is = null;
ByteArrayOutputStream bos = null;
try {
is = new FileInputStream(src);
bos = new ByteArrayOutputStream();
byte[] flush = new byte[1024];// 缓冲容器
int len = -1;
// 3、操作(分段读取)
while((len = is.read(flush)) != -1) {
bos.write(flush, 0, len);// 写出到字节数组
}
bos.flush();
return bos.toByteArray();
} catch (Exception e) {
e.printStackTrace();
}finally {
// 4、释放资源
try {
if(is != null) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
} /**
* 字节数组写出到图片
* 1、字节数组到程序 FileInputStream
* 2、程序到图片 ByteArrayOutputStream
* @param filePath
* @return
*/
public static void byteArrayToFile(byte[] src, String filePath) {
// 1、创建源
File dest = new File(filePath); // 2、选择流
FileOutputStream os = null;
ByteArrayInputStream bis = null;
try {
os = new FileOutputStream(dest);
bis = new ByteArrayInputStream(src);
byte[] flush = new byte[1024*10];// 缓冲容器
int len = -1;
// 3、操作(分段读取)
while((len = bis.read(flush)) != -1) {
os.write(flush, 0, len);// 写出到文件
}
os.flush();
} catch (Exception e) {
e.printStackTrace();
}finally {
// 4、释放资源
try {
if(os != null) {
os.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

运行测试:

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

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. 三层架构——ATM + 购物车

    三层架构:用户视图层.逻辑接口层.数据处理层. 一个功能,分成三层架构写,增加程序的可扩展性. 三层是互有联系的,从用户视图层开始写,涉及到那一层就到下一层去写,然后return 返回值,再写回来. ...

  2. coding++: java把一个整数拆分为单个值

    方式一: int num = 100; int[] ary = new int[(num+"").length()]; for(int i = ary.length-1;i> ...

  3. 本地不安装Oracle时,PLSQL的配置

    这篇我在csdn上写过的,文章地址:https://blog.csdn.net/weixin_40404606/article/details/101940542

  4. 了解PCI Express的Posted传输与Non-Posted传输

    0.写在前面 本文首发于公众号[两猿社],后续将在公众号内持续更新~ 其实算下来接触PCIe很久了,但是由于之前换工作,一直没有系统的学习和练手项目,现在新项目买了Synopsys的PCIe IP,总 ...

  5. 用c#每日更换“必应背景图片”为“桌面壁纸”

    必应每天都会更换背景图片,都非常漂亮,有的时候还十分惊艳,同时还会根据每个地区的特色不同应用不同的图片. 下面用c#抓取必应每天的背景图片,并实现桌面壁纸的每天自动切换 实现思路 1.通过获取&quo ...

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

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

  7. Apache本地服务器搭建(Mac版)

    由于Mac自带apache服务器,所以无需下载,apache默认处于开启状态. 可以在浏览器输入localhost,显示It works!,代表目前处于开启状态,默认文件目录为/Library/Web ...

  8. Java 判断日期的方法

    //str:传入的日期 eg:"2018-07-23" function IsDate(str) { arr = str.split("-"); if(arr. ...

  9. pip 安装 request 失败

    C:\Program Files\Python35\Scripts>pip install requests Collecting requests Using cached requests- ...

  10. Ubuntu16.04安装Vmware Tools

    开启虚拟机 安装VMware Tools 在虚拟机名称上,右键>>安装VMware Tools 此时,Ubuntu会提示已经插入光盘,并弹出文件管理页面. 此时我们打开终端查看分区挂载情况 ...