IO基础之转换流、内存流和合并流

转换流:把字节流转换成字符流
InputStreamReader:把字节输入流转成字符输入流。
OutputStreamWriter:把字节输出流转成字符输出流。


为什么有字节流转字符流,没有字符流转字节流:
字节流可以操作一切文件(纯文本文件/二进制文件)
字符流用来操作中文纯文本文件使用的,本身是对字节流的增强。


下面实现一下转换:

/**
 * Created by Layne_Yao on 2017-7-28 下午2:59:07.
 * CSDN:http://blog.csdn.net/Jsagacity
 */
public class StreamTransformReaderDemo {

	public static void main(String[] args) throws Exception, FileNotFoundException {
		File srcFile = new File("file/stream.txt");
		File destFile = new File("target/stream.txt");
		
		//把字节流转换成字符流
		Reader in = new InputStreamReader(new FileInputStream(srcFile),"GBK");
		Writer out = new OutputStreamWriter(new FileOutputStream(destFile),"GBK");
		
		//接下来操作字符流
		char[] buffer = new char[1024];
		int len = -1;
		while((len = in.read(buffer))!=-1){
			out.write(buffer,0,len);
		}
		in.close();
		out.close();

	}

}


内存流(数组流):
把数据先临时存在数组中,待会再从数组中获取出来:
1、字节内存流:ByteArrayOutputStream/ByteArrayInputStream
2、字符内存流:CharArrayWriter/CharArrayReader
3、字符串流:StringWriter/StringReader

字节内存流:

/**
 * Created by Layne_Yao on 2017-7-28 下午3:22:45.
 * CSDN:http://blog.csdn.net/Jsagacity
 */
//字节的数组流/内存流
public class ByteArrayDemo {

	public static void main(String[] args) throws Exception {
		//字节数组输出流:程序->内存
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		bos.write("ABCDE".getBytes());
		//要使用存储的临时数据
		byte[] buffer = bos.toByteArray();
		
		//字节数组输入流:内存-->程序
		ByteArrayInputStream bis = new ByteArrayInputStream(buffer);
		byte[] bys = new byte[5];
		int len = -1;
		while ((len = bis.read(bys)) != -1) {
			System.out.println(new String(bys, 0, len));
		}
		
		//其实无需关闭流
		bis.close();
		bos.close();

	}

}


字符内存流:

/**
 * Created by Layne_Yao on 2017-7-28 下午3:35:21.
 * CSDN:http://blog.csdn.net/Jsagacity
 */
// 字符内存流/数组流
public class CharArrayDemo {

	public static void main(String[] args) throws Exception {
		// 字符数组输出流
		CharArrayWriter writer = new CharArrayWriter();
		writer.write("这是字符内存流!!!");
		char[] data = writer.toCharArray();

		// 字符数组输入流
		CharArrayReader reader = new CharArrayReader(data);
		char[] bys = new char[10];
		int len = -1;
		while ((len = reader.read(bys)) != -1) {
			System.out.println(new String(bys, 0, len));
		}
		
		//其实无需关闭流
		writer.close();
		reader.close();

	}

}


字符串流:

/**
 * Created by Layne_Yao on 2017-7-28 下午3:50:24.
 * CSDN:http://blog.csdn.net/Jsagacity
 */
//字符串流(字符串的内存流)
public class StringWriterReaderDemo {

	public static void main(String[] args) throws Exception {
		//字符串的输出流
		StringWriter sWriter = new StringWriter();
		sWriter.write("字符串流(字符串的内存流)");
		
		
		//字符串的输入流
		StringReader sReader = new StringReader(sWriter.toString());
		char[] buffer = new char[1024];
		int len = -1;
		while((len = sReader.read(buffer))!=-1){
			System.out.println(new String(buffer,0,len));
		}

		//其实无需关闭流
		sWriter.close();
		sReader.close();
	}

}


合并流:

主要的功能是将两个文件的内容合并成一个文件;

下面将两个文件合并在一起:

/**
 * Created by Layne_Yao on 2017-7-28 下午3:40:21.
 * CSDN:http://blog.csdn.net/Jsagacity
 */
//合并流
public class SequenceDemo {
	public static void main(String args[]) throws Exception {
		//两个文件的输入流
		InputStream is1 = new FileInputStream("file/a.txt");
		InputStream is2 = new FileInputStream("file/b.txt");
		
		//文件的输出流
		OutputStream os = new FileOutputStream("target/ab.txt");
		
		//将两个输入流合并
		SequenceInputStream sis = new SequenceInputStream(is1, is2); 

		int len = -1;
		while ((len = sis.read()) != -1) {
			os.write(len);
		}
		sis.close();
		is1.close();
		is2.close();
		os.close();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值