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 可以把输出字节流转换成输出字符流 . 是符流通向字节流 ...
随机推荐
- 简单实用的PCM音频播放器--沉寂几年之后回归的第一份笔记
---恢复内容开始--- PCM音频网络流播放,至于用处,就不多解释了. 一个简单的类,基于NAudio,一个简单的拼装类,实例化时三个参数,依次是采样率,系统播放设备Index,播放声道,调用Pla ...
- WINDOWS远程控制LINUX终端XSHELL
WINDOWS远程控制LINUX终端XSHELL 笔者购买的腾讯云CENTOS7,通过腾讯云的控制台登录,每次都要打开相关网页.输入密码,感觉操作非常不方便. 使用XSHELL远程控制LINUX终端, ...
- 深入理解JS中&&和||
写了这么多JS,才发现JS的语法既是属于C语系的,又与一般C语系的编程语言某些地方有很大区别,其中&&和||就是其中一例. C语系中的&&和|| C语系的&&a ...
- android ------ 实现高德定位并获取相应信息 ( 最新版高德SDK 和 Android SDK版本)
Android开发项目时常常会遇到定位这个功能, 很久以前写过一篇了,官方也更新了一些东西,我也更新下 以前使用的是jar包 导入来实现高德定位 老版本 链接:https://www.cnblogs. ...
- 002 elasticsearch中的一些概念
在本文中,主要是ES7中的核心概念. ElasticSearch是一个实时分布式开源全文搜索和分析引擎.它可以从RESTful网络服务接口访问,并使用无模式JSON (JavaScript对象符号)文 ...
- 一、搭建简单的axis web服务
转: 一.搭建简单的axis web服务 1.在官方网站下载axis的工程(这个等下就有用的)和源码.jar包等,下载地址是: http://labs.renren.com/apache-mirror ...
- spring Securicty入门(一)
在一次项目中启动测试一个借口,结果提示要登录,如下图.原因是无意中引用了spring Securicty的依赖,别的啥都没干就弹出来这个,懵逼了半天最后注释掉.shiro你引个jar包别的不配置,也不 ...
- Flutter中的Container和Text组件的常用属性
效果图: import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends St ...
- linux下nacos的1.1.3版本集群部署
windows单机版参见0.9.0.RELEASE版本的spring cloud alibaba nacos实例 ,linux集群版我们还是用上次下载的nacos压缩包,通过rz -y上传到wlf用户 ...
- py文件单独调试django ORM的配置
1.新建一个py文件 2.代码环境搭建 import os if __name__ != '__main__': exit() # 加载django项目的配置信息 os.environ.setdefa ...