09 IO流(六)——ByteArray字节流、流对接
字节数组流
ByteArray流是节点流。
前面讲到的文件字节流,文件字符流,他们的源都是来自于pc硬盘。
本节要讲的字节数组流的源是来自于内存或网络。
它更合适用来处理来自网络的字节流。
由于源并不是来自于硬盘,所以流无需关闭。(写了关闭也不影响)
由于内存是有限的,为了避免内存占用过高,要对流进行一定限制。
任何东西包括对象,都可以转为字节数组,所以字节数组流是相当的方便。
字节数组输入流
数据来源不是文件,所以无需FileNotFoundException
字节数组输出流
由于字节数组输出流ByteArrayOutputStream它有新增方法,所以不能实现多态。(待验证20191123。)
字节数组输出流,它不能与文件对接,如果需要,则需要用以下方式对接文件:
字节数组输出流调用toByteArray()->字节文件输出流
不能与文件直接对接,所以字节数组输出流能做的就是调用toByteArray()返回一个字节数组(来自于流中的数据)。
流对接
流对接 练习:本地文件-(FileInputStream)->程序-(ByteArrayOutputStream)->数组-(ByteArrayInputStream)->程序-(FileOutputStream)->文件
import java.io.*;
public class IOTest01
{
public static void main(String[] args){
//源文件路径与目的路径
String srcPath = "1.png";
String destPath = "1_byte.png";
//调用方法
byte[] datas = fileToByteArray(srcPath);
byteArrayToFile(datas,destPath);
}
/**
*目的:模拟流对接
*流程:本地文件-(FileInputStream)->程序-(ByteArrayOutputStream)->数组-(ByteArrayInputStream)->程序-(FileOutputStream)->文件
*思路:拆分为读取方法与写入方法
*/ /**
*读取方法:文件到字节数组
*1.文件到程序
*2.程序到数组
*/
public static byte[] fileToByteArray(String filePath){
//1.文件源与目的地
File src = new File("1.png");
byte[] datas = null;//需要返回的数组
//选择流
InputStream fis = null;
ByteArrayOutputStream bos = null;//由于字节数组输出流类有新增方法要使用,所以不能多态
try{
fis = new FileInputStream(filePath);
bos = new ByteArrayOutputStream();
//3.操作
byte[] flush = new byte[1024*10];//缓冲区容器
int len = -1;//接收长度
while((len = fis.read(flush))!=-1){//读取
bos.write(flush,0,len);//写入流
}
bos.flush();//刷新
datas = bos.toByteArray();//从流得到数组
return datas;//返回数组
}catch(FileNotFoundException e){
e.printStackTrace();
System.err.println("找不到源文件");
}catch(IOException e){
e.printStackTrace();
System.err.println("读写异常!");
}finally{
try{
fis.close();
System.out.println("文件到数组,成功!");
}catch(IOException e){
e.printStackTrace();
System.err.println("流关闭失败");
}
}
return null;
} /**
*从数组到文件
*1.从数组到程序
*2.从程序到文件
*/
public static void byteArrayToFile(byte[] src,String filePath){
//1.文件源与目的地
File dest = new File(filePath);
//2.选择流
InputStream is = null;
OutputStream os = null;
try{
is = new ByteArrayInputStream(src);
os = new FileOutputStream(dest);
//3.操作
byte[] flush = new byte[1024*10];
int len = -1;
while((len = is.read(flush))!=-1){//读到数组中
os.write(flush,0,len);//写到文件
}
os.flush();//刷新
}catch(IOException e){
e.printStackTrace();
System.err.println("读写失败!");
}finally{
try{
os.close();
System.out.println("数组到文件,成功!");
}catch(IOException e){
e.printStackTrace();
System.err.println("流关闭失败!");
}
}
}
}
09 IO流(六)——ByteArray字节流、流对接的更多相关文章
- java IO之 File类+字节流 (输入输出 缓冲流 异常处理)
1. File类
- Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律
第一讲 IO概述 概述 1.IO流:即InputOutput的缩写. 2.特点: 1)IO流用来处理设备间的数据传输. 2)Java对数据的操作是通过流的方式. 3)Java用于操作流的对象都 ...
- Java基础-IO流对象之字节流(Stream)
Java基础-IO流对象之字节流(Stream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在前面我分享的笔记中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现 ...
- IO流-File,字节流,缓冲流
1.1 IO概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把 ...
- io基础(字节流、字符流、转换流、缓冲字符流)
首先需要明确的一点是输入流输出流的输入输出是站在内存的角度看的,读取文件,把文件内容写到内存中,是输入流:写文件,把内存中的数据写到文件中,是输出流. IO操作主要有4个抽象类: 字节输入输出流:In ...
- 01 语言基础+高级:1-8 File类与IO流_day09【字节流、字符流】
day09[字节流.字符流] 主要内容 IO流 字节流 字符流 异常处理 Properties 教学目标 能够说出IO流的分类和功能 能够使用字节输出流写出数据到文件 能够使用字节输入流读取数据到程序 ...
- Java(33)IO流的介绍&字节流
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228446.html 博客主页:https://www.cnblogs.com/testero ...
- 【C#IO 操作】stream 字节流|字符流 |比特流
stream的简介 Stream 所有流的抽象基类. 流是字节序列的抽象,例如文件.输入/输出设备.进程中通信管道或 TCP/IP 套接字. Stream类及其派生类提供这些不同类型的输入和输出的一般 ...
- Java:IO流其他类(字节数组流、字符数组流、数据流、打印流、Properities、对象流、管道流、随机访问、序列流、字符串读写流)
一.字节数组流: 类 ByteArrayInputStream:在构造函数的时候,需要接受数据源,而且数据源是一个字节数组. 包含一个内部缓冲区,该缓冲区包含从流中读取的字节.内部计数器跟踪 read ...
- IO(七)----转换流
输入字节流的转换流:InputStreamReader 是字节流通向字符流的桥梁. 输出字节流的转换流:OutputStreamWriter 可以把输出字节流转换成输出字符流 . 是符流通向字节流 ...
随机推荐
- T-MAX--冲刺合集
目录 设想和目标 计划 资源 变更管理 设计/实现 测试/发布 团队的角色,管理,合作 总结 照片 各组员对于最终项目成果的贡献度 这个作业属于哪个课程 2019秋福大软件工程实践Z班 (福州大学) ...
- Visual Studio、.NET Framework、VC++、C#各个版本的对应关系
Visual Studio..NET Framework.VC++.C#各个版本的对应关系 Visual Studio版本 .NET Framework版本 内部版本 VC++版本 C#版本 Visu ...
- 谱聚类算法及其代码(Spectral Clustering)
https://blog.csdn.net/liu1194397014/article/details/52990015 https://blog.csdn.net/u011089523/articl ...
- 效率包括了代码的GC 大小与内存大小,执行速度等等。其中执行速度不是关注 的重点
效率包括了代码的GC 大小与内存大小,执行速度等等.其中执行速度不是关注的重点
- 商城怎么使用ajax?
1.前端: Ajax.call('order.php?act=export', params, function (data) { document.getElementById("expo ...
- Docker Rootless Container
容器安全拾遗 - Rootless Container初探-云栖社区-阿里云https://yq.aliyun.com/articles/700923 medium.comhttps://medium ...
- snmpwalk 安装与使用详解-windows下
snmpwalk是SNMP的一个工具,它使用SNMP的GETNEXT请求查询指定OID(SNMP协议中的对象标识)入口的所有OID树信息,并显示给用户.通过snmpwalk也可以查看支持SNMP协议( ...
- flutter FloatingActionButton组件
import 'package:flutter/material.dart'; class FloatingActionButtonDemo extends StatelessWidget { @ov ...
- 在线http模拟工具
在线http模拟工具http://www.atool.org/httptest.php
- 软件定义网络基础---OF-Config协议
交换机与控制器继续通信前,是需要对其功能.特性以及资源进行配置才能进行工作,这些配置是如何实现的?是由专门的配置协议指导完成的 一:OF-Config协议 是OpenFlow交换机管理配置协议,是Op ...