Java IO 流-- 字节数组流ByteArrayInPutStream ByteArrayOutPutStream
字节数组流输于缓冲流,放在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的更多相关文章
- 系统学习 Java IO (七)----字节数组流 ByteArrayInputStream/ByteArrayOutputStream
目录:系统学习 Java IO---- 目录,概览 ByteArrayInputStream 如果数据存储在数组中,ByteArrayInputStream 可以很方便读取,它可以返回 InputSt ...
- Java I/O第二篇 之 (缓冲流 随机流 数组流 数据流)
1:缓冲流 BufferedReader BufferedWriter 具有较强的读写能力,能单独读写一行数据,能够减少对硬盘的访问次数. /** * 缓冲流 能够增强对问价数据的可读性,减少访问读 ...
- Java:IO流其他类(字节数组流、字符数组流、数据流、打印流、Properities、对象流、管道流、随机访问、序列流、字符串读写流)
一.字节数组流: 类 ByteArrayInputStream:在构造函数的时候,需要接受数据源,而且数据源是一个字节数组. 包含一个内部缓冲区,该缓冲区包含从流中读取的字节.内部计数器跟踪 read ...
- Java IO学习笔记(三)转换流、数据流、字节数组流
转换流 1.转换流:将字节流转换成字符流,转换之后就可以一个字符一个字符的往程序写内容了,并且可以调用字符节点流的write(String s)方法,还可以在外面套用BufferedReader()和 ...
- JAVA IO分析二:字节数组流、基本数据&对象类型的数据流、打印流
上一节,我们分析了常见的节点流(FileInputStream/FileOutputStream FileReader/FileWrite)和常见的处理流(BufferedInputStream/B ...
- Java基础IO类之字节数组流
package IODemo; //字节数组流 :内部维护这着一个字节数组,我们可以利用流的读取机制来处理字符串 无需关闭,不会报IO异常 // ByteArrayInputstream ByteAr ...
- Java文件与io——字节数组流数据流字符串流
字节数组流 ByteArrayInputStream:包含一个内部缓冲区,该缓冲区包含从流中读取的字节.内部计数器跟踪read方法要提供的下一个字节.关闭ByteArrayInputStream无效. ...
- IO知识点整理(序列化,管道流,数据流,字节数组流,与编码)
一:序列化的问题 1.序列号的使用问题 关于在序列化中的序列号的使用问题,一般要是使用. 因为,每次要序列化的类产生都会产生一个一个新的序列号,如果将这个类的程序修改后,就会产生新的序列号,以前序列化 ...
- 6.5(java学习笔记)其他流(字节数组流,数据流,对象流,打印流)
一.字节数组流 之前使用输入输出流的操作的对象是文件,而这里字节数组流操作的对象是内存,内存可以看做是一个字节数组. 使用字节数组流读写就可以看做是从内存A到内存B的读写,对象时内存即字节数组. 1. ...
随机推荐
- js数据类型及方法
数据类型及方法 数据类型 number 不区分整数和浮点数 string 字符串 boolean true / false 布尔 object null 数组 function 函数 undefine ...
- 读者来信 | 如何判断HBase Major Compact是否执行完毕?(已解决)
前言:之前有朋友加好友与我探讨一些问题,我觉得这些问题倒挺有价值的:于是就想在本公众号开设一个问答专栏,方便技术交流与分享,专栏名就定为:<读者来信>.欢迎关注本人微信公众号<HBa ...
- gitlab问题
1.gitclone前http://10.10.11.4:9999/SZRDC/I`````````.git改为http://git.berchina.com:9999/~~~~``` 2.Cloni ...
- .NET Core项目部署到Linux(Centos7)(十)总结
目录 1.前言 2.环境和软件的准备 3.创建.NET Core API项目 4.VMware Workstation虚拟机及Centos 7安装 5.Centos 7安装.NET Core环境 6. ...
- LeetCode48, 如何让矩阵原地旋转90度
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode第29篇,我们来看一道简单的矩阵旋转问题. 题意 题目的要求很简单,给定一个二维方形矩阵,要求返回矩阵旋转90度之后的 ...
- Pytest系列(11)- 失败重跑插件pytest-rerunfailures详细使用
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 环境前提 以下先决条件才能使用py ...
- RedHat 6.5 上将系统语言修改为中文
RedHat 6.5 上将系统语言修改为中文 1.打开终端,输入su -,键入密码,获取超级用户权限. 2.输入cd /etc/sysconfig,进入设置目录. 3.输入vi i18n,进入到配置文 ...
- Linux基础:Day02
Linux文件管理 创建 touch vim/vi echo重定向 touch 管理:atime mtime ctime touch 文件名 //如果文件不存在就创建文件 touch -a -t [ ...
- 浅谈 PCA与SVD
前言 在用数据对模型进行训练时,通常会遇到维度过高,也就是数据的特征太多的问题,有时特征之间还存在一定的相关性,这时如果还使用原数据训练模型,模型的精度会大大下降,因此要降低数据的维度,同时新数据的特 ...
- 第二章 IBM
1.不要招惹IBM,这可是一家做过军火的公司,一家参与了曼哈顿计划的公司. 同时也是世界上最大的服务公司.第二大软件公司.第二大数据库公司.拥有工业界最大的实验室.第一专利申请大户.最大的开源linu ...