黑马程序员-----IO之字节数组流、字符数组流和字符串流

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

1.字节数组流
字节数组流包括:ByteArrayInputStream和ByteArrayOutputStream。

1.1 ByteArrayInputStream
ByteArrayInputStream 包含一个内部缓冲区,该缓冲区包含从流中读取的字节。

关闭ByteArrayInputStream无效,此类中的方法在关闭此流后仍可被调用,而不会产生任何IOException。 

构造器:
ByteArrayInputStream(byte[] buf):创建一个ByteArrayInputStream,使用buf作为其缓冲区数组。
读取方法:
int read():从此输入流中读取下一个数据字节。
int read(byte[] b, int off, int len):将最多len个数据字节从此输入流读入 byte 数组。

1.2 ByteArrayOutputStream
ByteArrayOutputStream实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。
关闭ByteArrayOutputStream无效,此类中的方法在关闭此流后仍可被调用,而不会产生任何IOException
构造器:
ByteArrayOutputStream():创建一个新的 byte 数组输出流。 
ByteArrayOutputStream(int size):创建一个新的 byte 数组输出流,它具有指定大小的缓冲区容量(以字节为单位)。
写入方法:
void write(int b):将指定的字节写入此 byte 数组输出流。
void write(byte[] b, int off, int len):将指定 byte 数组中从偏移量off开始的len个字节写入此 byte 数组输出流。
void writeTo(OutputStream out):将此 byte 数组输出流的全部内容写入到指定的输出流参数中。
public class ByteArrayDemo {

	public static void main(String[] args) {

		//将一个字节数组作为源传入
		ByteArrayInputStream bis = new ByteArrayInputStream("你好".getBytes());
		//本身可视为一个数组,无须参数
		ByteArrayOutputStream bof = new ByteArrayOutputStream();
		
		int b = 0;
		while((b = bis.read()) != -1){
			//将每一个字节写入
			bof.write(b);
		}
		//将其变成字符串输出
		String str = bof.toString();
		System.out.println(str);
	}
}

2.字符数组流
字符数组包括:CharArrayReader和CharArrayWriter。

2.1 CharArrayReader
CharArrayReader可以实现一个可用作字符输入流的字符缓冲区。
在此类上调用 close() 关闭有效。
构造器:
CharArrayReader(char[] buf):根据指定的char数组创建一个 CharArrayReader。
读取方法:
int read():读取单个字符。
int read(char[] b, int off, int len):将字符读入数组的某一部分。

2.2 CharArrayWriter
CharArrayWriter可以实现一个可用作 Writer 的字符缓冲区。缓冲区会随向流中写入数据而自动增长。
在此类上调用 close() 无效,并且在关闭该流后可以调用此类中的各个方法,而不会产生任何IOException。
构造器:
CharArrayWriter():创建一个新的 CharArrayWriter。
CharArrayWriter(int initialSize):创建一个具有指定初始大小的新 CharArrayWriter。
写入方法:
void write(int c):将一个字符写入缓冲区。
void write(char[] c, int off, int len):将字符写入缓冲区。
void write(String str, int off, int len):将字符串的某一部分写入缓冲区。
void writeTo(Writer out):将缓冲区的内容写入另一个字符流。
public class CharArrayDemo {

	public static void main(String[] args) throws IOException {

		//将一个字符数组作为源传入
		CharArrayReader car = new CharArrayReader("你好".toCharArray());
		//本身可视为一个数组,无须参数
		CharArrayWriter caw = new CharArrayWriter();
		
		int b = 0;
		while((b = car.read()) != -1){
			//将每一个字节写入
			caw.write(b);
		}
		//将其变成字符串输出
		String str = caw.toString();
		System.out.println(str);
	}

}


3.字符串流
字符串流包括:StringReader和StringWriter。
它们使用字符串作为物理节点,用于实现从字符串读取内容,或将内容写入字符串(实际上用StringBuffer充当了字符串)。
它们使用时可FileReader和FileWriter基本相似,只是在创建时传入的是字符串节点,而不是文件节点。

3.1 StringReader
StringReader是一个字符串的字符流。
在此类上调用 close() 关闭有效。
构造器:
StringReader(String s):创建一个新字符串 reader。
读取方法:
int read():读取单个字符。
int read(char[] cbuf, int off, int len):将字符读入数组的某一部分。

3.2  StringWriter

StringWriter是一个字符流,可以用其回收在字符串缓冲区中的输出来构造字符串。 

关闭StringWriter无效。此类中的方法在关闭该流后仍可被调用,而不会产生任何IOException。  

构造器:

StringWriter():使用默认初始字符串缓冲区大小创建一个新字符串 writer。

StringWriter(int initialSize):使用指定初始字符串缓冲区大小创建一个新字符串 writer。

写入方法:

void write(int c):写入单个字符。

void write(char[] cbuf, int off, int len):写入字符数组的某一部分。

void write(String str):写入一个字符串。

void write(String str, int off, int len):写入字符串的某一部分。

public class StringDemo {

	public static void main(String[] args) {

		//-------下面演示StringReader类-----
		//StringReader类关闭有效
		String src = "十年生死两茫茫,不思量,自难忘。\r\n"
				+ "千里孤坟,无处话凄凉。\r\n"
				+ "纵使相逢应不识,尘满面,鬓如霜。 \r\n";
		
		//StringReader构造器以为不涉及操作资源,所以不会有异常
		StringReader sr = new StringReader(src);
		char[] buf = new char[32];
		int len = 0;
		try{
			while((len = sr.read(buf)) != -1){
				System.out.print(new String(buf, 0, len));
			}
		}catch(IOException e){
			e.printStackTrace();
		}finally{
			sr.close();
		}
		
		//----------下面演示StringWriter类------
		//StringWriter类关闭无效,即使关闭后调用其方法依然有效。
		//创建StringWriter时,实际上以一个StringBuffer作为输出节点
		StringWriter sw = new StringWriter(20);
		sw.write("夜来幽梦忽还乡,小轩窗,正梳妆。\r\n");
		sw.write("相顾无言,惟有泪千行。\r\n");
		sw.write("料得年年断肠处,明月夜,短松冈。\r\n");
		System.out.println("----------下面是sw的字符串节点里的内容--------");
		//使用toString方法即可
		System.out.println(sw.toString());
	}

}




---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------详细请查看: http://edu.csdn.net
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值