字节数组流

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. 请在mysql配置文件修sql-mode或sql_mode为NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    错误信息:请在mysql配置文件修sql-mode或sql_mode为NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 解决办法(最有效,以MySQL5.7为例): ...

  2. 2019-2020-1 20175313 《信息安全系统设计基础》实现mypwd

    目录 MyPWD 一.题目要求 二.题目理解 三.需求分析 四.设计思路 五.伪代码分析 六.码云链接 七.运行结果截图 MyPWD 一.题目要求 学习pwd命令 研究pwd实现需要的系统调用(man ...

  3. 7年.NET面试Java的尴尬历程

    先简单介绍LZ 现如今的情况,LZ 1992年出生,2012年实习,大专学渣一枚,实习期直接被校企合作直招到公司做.NET开发,现如今在某三线城市做后端技术经理,7年开发经验(5年.Net,2年.NE ...

  4. JVM 数组创建的本质

    1.创建数组 创建一个MyParent4[] 数组 public class MyTest4 { public static void main(String[] args) { MyParent4[ ...

  5. HmacSHA256摘要算法

    mac(Message Authentication Code,消息认证码算法)是含有密钥散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加上了密钥. 甲乙双方进行数据交换可以采取如下流程完成 ...

  6. python 设计模式之工厂模式 Factory Pattern (简单工厂模式,工厂方法模式,抽象工厂模式)

    十一回了趟老家,十一前工作一大堆忙成了狗,十一回来后又积累了一大堆又 忙成了狗,今天刚好抽了一点空开始写工厂方法模式 我看了<Head First 设计模式>P109--P133 这25页 ...

  7. Android studio: Android Studio 3.5格式化布局代码时错乱

    Android studio 又来搞事情了,更新到3.5版本后,格式化布局文件代码时,布局文件代码竟然会发生变化,意思是不让格式化代码了呗? 垃圾的IDE. 解决办法: “File”-"Se ...

  8. 007 搜索API

    1.说明 这个API用于在elasticsearch中搜索内容,用户可以通过发送以查询字符串为参数的get请求进行搜索,也可以在post请求的消息体中进行查询. 2.多索引 允许搜索所有的索引或某些特 ...

  9. Spring Boot Actuator:健康检查、审计、统计和监控(转)

    Spring Boot Actuator可以帮助你监控和管理Spring Boot应用,比如健康检查.审计.统计和HTTP追踪等.所有的这些特性可以通过JMX或者HTTP endpoints来获得. ...

  10. flutter drawer 自定义图标 icon 手动打开drawer

    方法1:GlobalKey import "package:flutter/material.dart"; class Test extends StatefulWidget { ...