数组流

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

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. width: 50%; display:inline-flex;

    <style lang="less"> @import "../style/weui.wxss";   @wx-width: 750rpx; @wx ...

  2. Quartz实现定时功能

    ---------------------------------博主讲废话 在自己实现爬取某个网站的信息后,发现,如果要自己每次把程序跑一遍不太现实(麻烦),所以有没有什么可以实现 定时的功能,只要 ...

  3. Java里的CompareAndSet(CAS)

    ;            if (compareAndSet(current, next))                return next;        }    } 首先可以看到他是通过一 ...

  4. 解决Raize日历控件显示的问题

    解决Raize日历控件显示的问题 近自己的程序被测试人员发现一个小问题,就是程序中的日历选择框,显示中的“星期一.星期二....”都显示成了“星.....”,我自己看了代码,原来是raize的控件问题 ...

  5. ffmpeg参数使用说明1

    1.     ffmpeg.exe -i F:闪客之家闪客之歌.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:11.flv 2.     ffmpeg ...

  6. Model的save方法的使用

    在使用类方法创建对象的时候发生save()总提示缺少self参数的错误: class BookInfo(models.Model): #创建书本信息类,继承models.Model booktitle ...

  7. MySQL中InnoDB全文检索

    InnoDB存储引擎从1.2.x开始支持全文索引技术,其采用full inverted index的方式.在InnoDB存储引擎中,将(DocumentID,Postition)视为一个ilist.因 ...

  8. 0x05 MySQL 数据操作

    一 插入数据INSERT 1. 插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n); 语法二: INSERT I ...

  9. MySQL第一天

    数据库课程体系 在PHP阶段,将数据库分为三个阶段:     基础阶段(就业班第一个阶段): 6天, mysql数据库的基本操作(增删改查), 以及一些高级操作(视图, 触发器,函数,存储过程等), ...

  10. .NET Framework 3.5-8 下载地址

    https://dotnet.microsoft.com/download/dotnet-framework Version Released End of life .NET Framework 4 ...