Java IO(七)ByteArrayInputStream 和 ByteArrayOutputStream
Java IO(七)ByteArrayInputStream 和 ByteArrayOutputStream
一、介绍
ByteArrayInputStream 和 ByteArrayOutputStream 是字节数组输入 / 输出流。他们分别继承于 InputStream 和 OutputStream 。
(一)、ByteArrayInputStream
ByteArrayInputStream 是字节数组输入流。它包含一个内部缓冲区,该缓冲区包含从流中读取的字节;通俗点说,它的内部缓冲区就是一个字节数组,而ByteArrayInputStream本质就是通过字节数组来实现的。
我们都知道,InputStream 通过 read() 向外提供接口,供它们来读取字节数据;而 ByteArrayInputStream 的内部额外的定义了一个计数器,它被用来跟踪 read() 方法要读取的下一个字节。
(二)、ByteArrayOutputStream
ByteArrayOutputStream 是字节数组输出流。ByteArrayOutputStream 中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。
二、构造方法
(一)、ByteArrayInputStream
(二)、ByteArrayOutputStream
三、常用API
(一)、ByteArrayInputStream
(二)、ByteArrayOutputStream
四、实例
public static void main(String[] args) {
write();
read();
} /**
* ByteArrayOutputStream
*/
private static void write() {
ByteArrayOutputStream out = null;
byte[] buffer = "abcdefghijklmnopqrstuvwxyz".getBytes();
try {
out = new ByteArrayOutputStream();
out.write(99);
System.out.println("out = " + out); out.write(buffer, 5, 5);
System.out.println("out = " + out); int size = out.size();
System.out.println("size = " + out); byte[] b = out.toByteArray();
System.out.println("byteArray = " + new String(b)); String str = out.toString();
System.out.println("str = " + str); ByteArrayOutputStream out2 = new ByteArrayOutputStream();
out.writeTo((OutputStream)out2);
System.out.println("out2 = " + out2); out.reset();
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(out != null) {
out.close();
}
}catch(Exception e) {
e.printStackTrace();
}
}
} /**
* ByteArrayInputStream 测试函数
*/
private static void read() {
ByteArrayInputStream in = null;
byte[] buffer = "abcdefghijklmnopqrstuvwxyz".getBytes();
try {
in = new ByteArrayInputStream(buffer);
for (int i = 0; i < 5; i++) {
if(in.available() >= 0) {
char ch = (char) in.read();
System.out.println(ch);
}
}
in.skip(5); byte[] bu = new byte[10];
in.read(bu);
System.out.println(new String(bu)); in.reset(); in.read(bu, 0, 8);
System.out.println(new String(bu));
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(in != null) {
in.close();
}
}catch(Exception e) {
e.printStackTrace();
}
}
}
Java IO(七)ByteArrayInputStream 和 ByteArrayOutputStream的更多相关文章
- java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)
前面学习ByteArrayInputStream,了解了“输入流”.接下来,我们学习与ByteArrayInputStream相对应的输出流,即ByteArrayOutputStream.本章,我们会 ...
- 黑马程序猿 IO流 ByteArrayInputStream与ByteArrayOutputStream
---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- package cn.itcast.IO; i ...
- 系统学习 Java IO (七)----字节数组流 ByteArrayInputStream/ByteArrayOutputStream
目录:系统学习 Java IO---- 目录,概览 ByteArrayInputStream 如果数据存储在数组中,ByteArrayInputStream 可以很方便读取,它可以返回 InputSt ...
- Java之IO(三)ByteArrayInputStream和ByteArrayOutputStream
转载请注明源出处:http://www.cnblogs.com/lighten/p/6972297.html 1.前言 这组输入输出流比较特殊,一般的流指定都是磁盘IO和网络IO,从文件中读取数据或者 ...
- java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括InputStream)
我们以ByteArrayInputStream,拉开对字节类型的“输入流”的学习序幕.本章,我们会先对ByteArrayInputStream进行介绍,然后深入了解一下它的源码,最后通过示例来掌握它的 ...
- 系统学习 Java IO ---- 目录,概览
Java IO 类的系统教程,原创.主要参考自英文教程 Java IO Tutorial 和 Java Doc. http://tutorials.jenkov.com/java-io/index.h ...
- java io系列01之 "目录"
java io 系列目录如下: 01. java io系列01之 "目录" 02. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括 ...
- java io系列06之 序列化总结(Serializable 和 Externalizable)
本章,我们对序列化进行深入的学习和探讨.学习内容,包括序列化的作用.用途.用法,以及对实现序列化的2种方式Serializable和Externalizable的深入研究. 转载请注明出处:http: ...
- java.io.stream
1. package com.io.Stream; import java.io.*; public class NyFileInputStream1 { /** * 读取文件的streamIO * ...
- java io系列04之 管道(PipedOutputStream和PipedInputStream)的简介,源码分析和示例
本章,我们对java 管道进行学习. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_04.html java 管道介绍 在java中,PipedOu ...
随机推荐
- Python(Redis 中 Set/Zset 类型数据和其他操作)
1.redis 基本操作命令 Set 操作 Set 集合就是不允许重复的列表 无序集合 sadd(name,values) 给 name 对应的集合中添加 1 个或多个元素 import redis ...
- turtle库应用实例-五角星绘制
五角星绘制 ...
- JWT安全问题
Json Web Tokens 在线工具网站:https://jwt.io/ python 用到的库 jwt // pip install pyjwt JWTCrack key // git c ...
- Struts Scan工具的使用
前言 最近看了关于Struts2漏洞,参考文章 https://www.freebuf.com/vuls/168609.html,这篇文章里对Struts2的漏洞及原理进行了详细的讲解.自己也从网上找 ...
- pycharm添加头注释
1.进入setting->Editor->File and Code Templates->Python Script 2.添加内容 # coding = 'utf-8'# @作者: ...
- 关于 k210 的 micropython 添加 ussl 模块,实现 https 访问支持的那些事。
起因 事情已经过去快一周了吧,继上次修复 maixpy k210 的 esp8285 at 通信后,突然遇到泽畔大大问,要不要做 ussl 的支持? 评估了一下各方的实现,想了一下自己也刚好在做网络层 ...
- [hdu3507 Print Article]斜率优化dp入门
题意:需要打印n个正整数,1个数要么单独打印要么和前面一个数一起打印,1次打印1组数的代价为这组数的和的平方加上常数M.求最小代价. 思路:如果令dp[i]为打印前i个数的最小代价,那么有 dp[i] ...
- [hdu4628 Pieces]二进制子状态,DP
题意:给一个长度为16的字符串,每次从里面删掉一个回文序列,求最少需要几次才能删掉所有字符 思路:二进制表示每个字符的状态,那么从1个状态到另一个状态有两种转移方式,一是枚举所有合法的回文子序列,判断 ...
- [hdu5351]找规律,大整数模板
题意:f(1)="a",f(2)="b",f(i)=f(i-1)+f(i-2),"+"表示连接符.给定n,m,求f(n)的前m个字符的“ne ...
- ZOOM火速收购加密公司Kaybase 能否补齐安全短板?
近日,一直因为安全漏洞饱受批评的云视频会议协作工具ZOOM,,其公司全资收购一家初创企业Kaybase,以加强ZOOM系统的隐私保护和安全性. Kaybase公司官网 2020年年初,随着疫情的蔓 ...