数组流

流的源和目的地除了可以是文件外,还可以是计算机内存。

1.字节数组流

字节数组输入流ByteArrayInputStream和字节数组输出流ByteArrayOutputStream分别使用字节数组作为流的源和目的地。

ByteArrayInputStream的构造方法如下:

ByteArrayInputStrem(byte[] buf);

ByteArrayInputStrem(byte[] buf, int offset, int length);

第一个构造方法构造的字节数组流的源是参数buf指定的数组的全部字节单元,第二个构造方法的字节数组的源是buf指定的数组从offset处按顺序取的length个字节单元。

ByteArrayOutputStream流的构造方法如下:

ByteArrayOutputStream();

ByteArrayOutputStream(int size);

第一个构造方法构造的字节数组输出流指向一个默认大小为32字节的缓存区,如果输出流向缓冲区写入的字节个数大于缓冲区时,缓冲区的容量会自动增加。第二个构造方法构造的字节数组输出流指向的缓存区的初始大小由参数size指定,如果输出流向缓冲区写入的字节个数大于缓冲区时,缓冲区的容量会自动增加。

字节数组输出流调用public void write(int b);方法可以顺序地向缓冲区写入一个字节;调用public void write(byte[] b, int off, int len);方法可以将参数b中指定的len个字节顺序地写入缓冲区,参数off指定从b中写出的字节的起始位置:调用public byte[] toByteArray()方法可以返回输出流写入到缓冲区的全部字节。

2.字符数组流

与字符数组流对应的是字符数组流CharArrayReader和CharArrayWriter类,字符数组流分别使用字符数组作为流的源和目标。

代码展示如下所示:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.CharArrayReader;
import java.io.CharArrayWriter;
import java.io.IOException; public class Test01 { public static void main(String[] args) {
// TODO Auto-generated method stub try {
ByteArrayOutputStream outByte = new ByteArrayOutputStream();
byte [] byteContent = " mid-autumn festival".getBytes();
outByte.write(byteContent);//将字节数据写入到缓冲区中
ByteArrayInputStream inByte = new ByteArrayInputStream(outByte.toByteArray());
byte backByte [] = new byte[outByte.toByteArray().length];
inByte.read(backByte);
System.out.println(new String(backByte)); CharArrayWriter outChar = new CharArrayWriter();
char [] charContent = "中秋快乐".toCharArray();
outChar.write(charContent);//将字符数据写入到缓冲区
CharArrayReader inChar = new CharArrayReader(outChar.toCharArray());//将缓冲区的数据转化为字符数组形式
char backChar[] = new char[outChar.toCharArray().length];
inChar.read(backChar);
System.out.println(new String(backChar)); }
catch (IOException e) {} } }

程序运行之后,结果如下所示:

解释上述代码:

先创建字节数组输出流对象,然后将一个字节数组写入缓冲区中。

将缓冲区中的字节数组转化后作为创建字节数组输入流对象的参数。创建输入流对象后,利用read(byte []b)方法将原先字节数组中的数据读入到b中再输出。

字符数组输出流和输入流对象的创建过程类似。

ByteArrayOutputStream或ByteArrayInputStream不需要关闭流

review29的更多相关文章

随机推荐

  1. Redis 持久化机制

    1.背景 之前在使用redis 时候,没有过多的考虑持久化! 但是这样即使你用了redis 也是徒劳,表面上你是用上了redis 进行缓存数据,感觉已经给自己的架构添加了一个道QPS 防护墙! 哈哈, ...

  2. mongodb超时

    1 connection timeout 设置连接mongo数据库的超时时间,如果在该时间内未连接成功,那么就是超时了. 2 socket timeout 设置一次操作的超时时间,比如一次查询,如果在 ...

  3. Nuxt使用高德地图

    事先准备 注册账号并申请Key 1. 首先,注册开发者账号,成为高德开放平台开发者 2. 登陆之后,在进入「应用管理」 页面「创建新应用」 3. 为应用添加 Key,「服务平台」一项请选择「 Web ...

  4. diff工具

    Beyond Compare 4  可以diff文件夹.单个文件.

  5. python并发编程&协程

    0x01 前导 如何基于单线程来实现并发? 即只用一个主线程(可利用的cpu只有一个)情况下实现并发: 并发的本质:切换+保存状态 cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操 ...

  6. corethink功能模块探索开发(二)让这个模块可安装

    要想让这个模块可安装,只需要在opcmf.php文件中写一些配置数据就行 随便写点 Equip/opencmf.php <?php // 模块信息配置 return array( // 模块信息 ...

  7. 4.4 使用STM32控制MC20进行GPS帧数据解析

    需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...

  8. Educational Codeforces Round 29(6/7)

    1.Quasi-palindrome 题意:问一个字符串(你可以添加前导‘0’或不添加)是否是回文串 思路:将给定的字符串的前缀‘0’和后缀‘0’都去掉,然后看其是否为回文串 #include< ...

  9. Dancing Link专题

    一些链接: http://www.cnblogs.com/-sunshine/p/3358922.html http://www.cnblogs.com/grenet/p/3145800.html 1 ...

  10. Linux:Ubuntu16.04下创建Wifi热点

    Linux:Ubuntu16.04下创建Wifi热点说明 1.Ubuntu16.04里面可以直接创建热点,而不用像以前的版本,还要其他辅助工具. 2.本篇文章参考自编程人生 具体步骤如下: 1. 点击 ...