字节数组流

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字节流、流对接的更多相关文章

  1. java IO之 File类+字节流 (输入输出 缓冲流 异常处理)

    1. File类

  2. Java基础---IO(一)---IO流概述、字符流、字节流、流操作规律

    第一讲     IO概述 概述 1.IO流:即InputOutput的缩写. 2.特点: 1)IO流用来处理设备间的数据传输. 2)Java对数据的操作是通过流的方式. 3)Java用于操作流的对象都 ...

  3. Java基础-IO流对象之字节流(Stream)

    Java基础-IO流对象之字节流(Stream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在前面我分享的笔记中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现 ...

  4. IO流-File,字节流,缓冲流

    1.1 IO概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再把 ...

  5. io基础(字节流、字符流、转换流、缓冲字符流)

    首先需要明确的一点是输入流输出流的输入输出是站在内存的角度看的,读取文件,把文件内容写到内存中,是输入流:写文件,把内存中的数据写到文件中,是输出流. IO操作主要有4个抽象类: 字节输入输出流:In ...

  6. 01 语言基础+高级:1-8 File类与IO流_day09【字节流、字符流】

    day09[字节流.字符流] 主要内容 IO流 字节流 字符流 异常处理 Properties 教学目标 能够说出IO流的分类和功能 能够使用字节输出流写出数据到文件 能够使用字节输入流读取数据到程序 ...

  7. Java(33)IO流的介绍&字节流

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228446.html 博客主页:https://www.cnblogs.com/testero ...

  8. 【C#IO 操作】stream 字节流|字符流 |比特流

    stream的简介 Stream 所有流的抽象基类. 流是字节序列的抽象,例如文件.输入/输出设备.进程中通信管道或 TCP/IP 套接字. Stream类及其派生类提供这些不同类型的输入和输出的一般 ...

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

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

  10. IO(七)----转换流

    输入字节流的转换流:InputStreamReader 是字节流通向字符流的桥梁. 输出字节流的转换流:OutputStreamWriter  可以把输出字节流转换成输出字符流 .  是符流通向字节流 ...

随机推荐

  1. sql 数字转换为字符串补0

    select right('00000000000'+convert(varchar(5),123),5) select right('00000000000'+cast(123   as   var ...

  2. Android分区解释

    让我们从Android手机和平板电脑的标准内存分区列表开始.分区有:/boot/system/recovery/data/cache/misc 此外,有SD卡的分区./sdcard/sd-ext 请注 ...

  3. super与this的用法

    1 super和this都是调用其他的构造方法 super放在构造方法的第一条语句,调用父类的某种构造方法,如果没有super语句,会默认调用父类中无参的构造方法,如果父类构造方法指明而且都有参数,子 ...

  4. (转)设置了RemoveIPC=yes 的RHEL7.2 会crash掉Oracle asm 实例和Oracle database实例

    设置了RemoveIPC=yes 的RHEL7.2  会crash掉Oracle asm 实例和Oracle database实例,该问题也会在使用Shared Memory Segment (SHM ...

  5. ImageSwitcher 图片切换器

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  6. 安装ORACLE服务出现Oracle Net Configuration Assistant 失败问题【我】

    安装ORACLE服务出现Oracle Net Configuration Assistant 失败问题 本地安装oracle11g,报错提示: 参考下面文章: 报错原因: 主要是对文件系统的访问权限问 ...

  7. 使用navicat的坑

    小黄人发送数据,测试软件是否将数据存入mysql数据库中,使用的是navicat. 首先截断了表,所有数据清零,但是此时表并没有回到第一页[由于前面查看最新数据,已经翻到了最后一页],然后小黄人发数据 ...

  8. 一个兼容 node 与浏览器的模块写法

    一个兼容 node 与浏览器的模块写法 // test.js (function (root, factory) { if (typeof define === 'function' &&am ...

  9. python读写csv文件的方法(还没试,先记录一下)

    该csv模块定义了以下功能: csv.reader(csvfile,dialect ='excel',** fmtparams ) 返回一个reader对象,它将迭代给定csvfile中的行. csv ...

  10. 123457123456#1#----com.MC.CarWashKidsGames234----前拼后广--洗车游戏mc-mc1111

    com.MC.CarWashKidsGames234----前拼后广--洗车游戏mc-mc1111