Java II:2.1.3、组合输入/输出流过滤器

本文介绍了如何在Java中组合使用不同的输入/输出流过滤器,包括DataInputStream和DataOutputStream用于读写基本数据类型,BufferedInputStream提供缓冲机制,以及PushbackInputStream实现可回推功能。示例代码展示了这些流的使用方法。

组合输入/输出流过滤器

package xyz.jangle.javabase.n2.b1;

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PushbackInputStream;
import java.nio.file.Files;
import java.nio.file.Paths;

/**
 * 2.1.3、组合输入/输出流过滤器
 * @author jangle
 * @email jangle@jangle.xyz
 * @time 2021年2月11日 上午9:24:17
 * 
 */
public class M3 {
	
	public static String testFile = "test.txt";
	
	public static String testPathFile = M3.class.getResource("/").getPath()+testFile;
	
	public static String pathFileStr = testPathFile.substring(1);
	

	public static void main(String[] args) throws IOException {
		
		
		System.out.println(M3.class.getResource("/").getPath());
		System.out.println(Paths.get(new File("").getAbsolutePath()));
		System.out.println(testPathFile);
		System.out.println(pathFileStr);
		// 1、将FileInputStream构造的对象传递给DateInputStream对象,
		//	如此来从文件中读取数字(等Java基本数据类型)
		var fin = new FileInputStream(M3.class.getResource("/").getPath() +testFile);
		var din = new DataInputStream(fin);
//		double readDouble = din.readDouble();
//		System.out.println(readDouble);
//		var dout = new DataOutputStream(Files.newOutputStream(Paths.get(M3.class.getResource("/").getPath()+testFile)));
		var dout = new DataOutputStream(new FileOutputStream(M3.class.getResource("/").getPath()+testFile));
		dout.writeInt(1);
		dout.writeInt(1);
		dout.writeInt(1);
		dout.writeInt(1);
		dout.writeInt(1);
		dout.writeInt(1);
		dout.close();
		
		System.out.println(din.readInt());
		din.close();
		
		// 2、使用缓冲区,每次从操作系统中获取缓冲区大小的数据(否则如1则每次只获取1字节)
		// 如下则可以使用带缓冲机制的read方法。
		var din2 = new DataInputStream(new BufferedInputStream(Files.newInputStream(Paths.get(pathFileStr))));
		double readDouble2 = din2.readDouble();
		System.out.println(readDouble2);
		din2.close();
		// 3、可回推输入流(当你预读一个字节,不符合你的期望时,可以对其进行推回。)
		var pbin = new PushbackInputStream(new BufferedInputStream(Files.newInputStream(Paths.get(pathFileStr))));
		int read = pbin.read();
		System.out.println("read:"+read);
		if(read != 'a')pbin.unread(read);
		// 当你希望预览数字时,再嵌套一层数据输入流
		var din3 = new DataInputStream(pbin);
		int readInt = din3.readInt();
		System.out.println("readInt:"+readInt);
		if(readInt!= 3)pbin.unread(readInt);
		din3.close();

	}

}

 

文本输入/输出:https://blog.youkuaiyun.com/Bof_jangle/article/details/113797018

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值