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. ...
随机推荐
- jmeter参数化之函数助手(十五)
jmeter-参数化: 参数化的作用:调用接口入参时.有时要求参数经常变化,如果每次去修改就会变得很繁琐,这时候就需要把经常变化的值改变为提前编辑好的文档或函数中,便于调用时使用不同的值. Jmete ...
- python之常用模块ConfigParser
这个常见于.conf,.ini等类型的配置文件 下面先看一下如果通过python生成一个.ini文件 import configparser #2.x is ConfigParserconfig = ...
- 二分搜索树(Binary Search Tree)
目录 什么是二叉树? 什么是二分搜索树? 二分搜索树的基本操作 二分搜索树添加新元素 二分搜索树的遍历(包含非递归实现) 删除二分搜索树中的元素 什么是二叉树? 在实现二分搜索树之前,我们先思考一 ...
- D - 淡黄的长裙 HDU - 4221(贪心)
D - 淡黄的长裙 HDU - 4221(贪心) James is almost mad! Currently, he was assigned a lot of works to do, so ma ...
- hello world: 我的博客写作思路
1. 本人计算机专业,研究生刚毕业,即将入职金融科技领域,决定借博客园平台写自己的博客,原因如下: 从小白到大白,离不开各大学习平台和技术博客的指导和分享,是时候回馈了. 借此机会整理自己从本科.研究 ...
- jsbrage——和app交互
<html> <head> <meta content="text/html; charset=utf-8" http-equiv="c ...
- 【php】面向对象(五)
一. 类型约束: a) 约束函数可传入的参数类型二. 类的遍历 a) Foreach b) 可以将类当中的所有成员属性遍历出来三. 关于操作类与对象的一些函数: a) 判断函数 i. Function ...
- python工业互联网监控项目实战2—OPC
OPC(OLE for Process Control)定义:指为了给工业控制系统应用程序之间的通信建立一个接口标准,在工业控制设备与控制软件之间建立统一的数据存取规范.它给工业控制领域提供了一种标准 ...
- System.out.println()的真实含义
每一个人的Java学习之路上恐怕都是用以下代码开始的吧? public class Test { public static void main(String[] args) { System.out ...
- python3(五) if
age = 20 if age >= 18: print('your age is', age) print('adult') # 如果if语句判断是True,就把缩进的两行print语句执行了 ...