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 ...
随机推荐
- [bzoj1924]P2403 [SDOI2010]所驼门王的宝藏
tarjan+DAG 上的 dp 难点在于建图和连边,其实也不难,就是细节挺恶心 我和正解对拍拍出来 3 个错误... 传送门:luogu bzoj 题目描述 有座宫殿呈矩阵状,由 \(R\times ...
- python selenium(定位方法)
一.定位方法 注意:元素属性必须唯一存在 #id定位 find_element_by_id() #name定位 find_element_by_name() #class_name定位 find_el ...
- css属性、样式、边框、选择器
CSS 层叠样式表 (Cascading Style Sheets,缩写为 CSS),是一种 样式表 语言, 用来描述 HTML或 XML(包括如 SVG.MathML.XHTML 之类的 XML 分 ...
- 题目分享R
题意:有n只蚂蚁在木棍上爬行,每只蚂蚁的速度都是每秒1单位长度,现在给你所有蚂蚁初始的位置(蚂蚁运动方向未定),蚂蚁相遇会掉头反向运动,让你求出所有蚂蚁都·掉下木棍的最短时间和最长时间. 分析:(其实 ...
- Java面试题:抽象类和接口的区别
1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系.但是,一个类却可以实现多个interface. 2.在abstract class 中可以有自己 ...
- 全面解读 vue3.0
在此附上链接,在知乎上看到的,感觉说的很详细 https://zhuanlan.zhihu.com/p/46269528
- 【T-SQL】基础 —— 语法(1)
USE master--检查是否已经存在一个表,如果有就删除IF(EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = ' ...
- (2)通信中为什么要进行AMC?
AMC,Adaptive Modulation and Coding,自适应调制与编码. 通信信号的传输环境是变化不定的,信道环境时好时差.在这种情景下,我们不可能按照固定的MCS进行信号发送.假如信 ...
- [hdu5373 The shortest problem]模拟
http://acm.hdu.edu.cn/showproblem.php?pid=5373 思路:按题意来即可. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- scrapy五大核心组件
scrapy五大核心组件 引擎(Scrapy)用来处理整个系统的数据流处理, 触发事务(框架核心) 调度器(Scheduler)用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. ...