Java:流过滤器

接上节Java:流(Stream)

概念

在上节中,我们只能往文件中读写二进制的数据,FileOutputStream和FileInputStream都只能进行单个字节的读写,可如果我们要写一些int类型类型的数据到文件中(4个字节),那我们就需要用到过滤器了。

实例

通过增加过滤器DataOutputStream可以处理基本数据类型

public class test {
 
	public static void main(String[] args){
		System.out.println("hello");
		byte[] buffer = new byte[10];
		for(int i=0; i<buffer.length; i++) {
			buffer[i] = (byte)i;
		}
		try {//打开一个文件,在文件上面接了一个缓冲过滤器,缓冲上面接了一个可以写复杂数据的Data过滤器得到一个out对象
			//可以用out向文件中写基础数据,当它写到流里面得过程中,它会被缓冲(buffered),最终会写到文件中(file)
			DataOutputStream out = new DataOutputStream(	//可以写复杂的数据 
					new BufferedOutputStream(				//起到缓冲区的作用
							new FileOutputStream("a.dat"))); //可以单个字节得写数据
			int i = 0x12;			//String i = "sun";
			out.writeInt(i);		//out.writeUTF(i);
			
			out.close();
			DataInputStream in = new DataInputStream(
					new BufferedInputStream(
							new FileInputStream("a.dat")));
			int j = in.readInt();	//String j = in.readUTF();
			System.out.println(j);
		} catch (IOException e) {
			e. printStackTrace();
		}
	}
	
}

结果
在工作目录下生成一个a.dat文件,里面会以二进制得形式存储你输入的数据
控制台结果:

hello
18

当我们要处理(输入输出)人可以读的文本,可以使用Reader/Writer

  • 二进制采用InputStream/OutputStream
  • 文本数据采用Reader/Writer

现在我们的文本一般都不是unicode的编码,就算是unicode,大部分也是utf8的编码形式。
当文件不是unicode时,我们借助流(Stream)来打开文件,在Stream的基础上以过滤器的方式去建立Reader/Writer来实现文本的输入和输出。

如果你想要产生相应的文本的内容,我们就去建立一个PrintWriter,这个PrinterWriter建立在OutputStreamWriter上,最终建立在FileOutputStream的基础上。这样写下来的文件是一个ascii码或国标码(GB2312或GBK)的文件,而这取决于你的系统。

public class test {
 

	public static void main(String[] args){
		byte[] buffer = new byte[10];
		for(int i=0; i<buffer.length; i++) {
			buffer[i] = (byte)i;
		}
		try {	
		//先用file打开a.dat文件,现在可以输入二进制数据;用output作为桥梁的连接Stream和Writer
		//(输入的是Stream输出的是Writer)然后用buffered来缓冲Writer,最后得到一个Writer类型的out
			PrintWriter out  = new PrintWriter(
					new BufferedWriter(
							new OutputStreamWriter(
							new FileOutputStream("a.txt"))));
			int i = 0x12;
			out.println(i);
			out.close();
			BufferedReader in = new BufferedReader(
					new LineNumberReader(
							new InputStreamReader(	
									new FileInputStream("src/hello/Main.java")/*"uft8"*/)));//本文件路径
									//当文件的编码格式和默认的不同时,在InputStreamReader的括号中输入编码格式
											
			String line;
			while((line = in.readLine()) != null) {
				System.out.println(line);
			}
			in.close();
		} catch (IOException e) {
			e. printStackTrace();
		}
	}
	
}

结果会在工作目录下生成一个a.txt的文件,在控制台输出如上的代码。

数据读取的选择

在这里插入图片描述
是二进制:
InputStream
如果你想读出Java的基本数据类型,则可以用DataInputStream来读
不是二进制:
Reader:把文本当成文章来读,在数据上面构建一个Reader,用Reader的readLine()获取它每一行的东西。
Scanner:把文本当数据来读,如用空格分隔等操作

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值