BufferedReader 输入输出流

2 篇文章 0 订阅
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

public class BufferedTest {

	public void testBufferedReader()throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		char c;
		String s;
		System.out.println("br.read()"+"    ");
		do {
			c = (char) br.read();
			System.out.println(c);
		}while (c!='q');
		
		System.out.println("br.readline()"+ "      ");
		do {
			s = br.readLine();
			System.out.println(s);
		}while (!s.equals("quit"));
		
		System.out.println("OVER!");
	}
	
	public void testBufferedReaderFile() throws IOException,FileNotFoundException{
		String line;
		try(
		BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("0.txt")))){
			while((line = br.readLine()) != null) {
				System.out.println(line);
			}
			}catch(FileNotFoundException e) {
				System.err.println("File Not Found!");
			}catch(IOException e) {
				e.printStackTrace();
		}
	}
	
	public static void main(String [] args) throws IOException, FileNotFoundException{
		BufferedTest bt = new BufferedTest();
		bt.testBufferedReader();
		bt.testBufferedReaderFile();
	}
}

演示代码如上,注意一点是在readline时,退出时对字符串的相等判定使用equals方法,不用!=。

1、java.io.BufferedReader和java.io.BufferedWriter类各拥有8192字符的缓冲区。当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取,使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中。如果缓冲区中的数据满了,才会一次对目的地进行写出。

2、从标准输入流System.in中直接读取使用者输入时,使用者每输入一个字符,System.in就读取一个字符。为了能一次读取一行使用者的输入,使用了BufferedReader来对使用者输入的字符进行缓冲。readLine()方法会在读取到使用者的换行字符时,再一次将整行字符串传入。

3、System.in是一个位流,为了转换为字符流,可使用InputStreamReader为其进行字符转换,然后再使用BufferedReader为其增加缓冲功能。

没有经过Buffered处理的IO, 意味着每一次读和写的请求都会由OS底层直接处理,这会导致非常低效的问题。


经过Buffered处理过的输入流将会从一个buffer内存区域读取数据,本地API只会在buffer空了之后才会被调用(可能一次调用会填充很多数据进buffer)。


经过Buffered处理过的输出流将会把数据写入到buffer中,本地API只会在buffer满了之后才会被调用。


 


BufferedReader/BufferedWriter可以将字符流(Reader)包装成缓冲流,这是最常见用的做法。


另外,BufferedReader提供一个readLine()可以方便地读取一行,而FileInputStream和FileReader只能读取一个字节或者一个字符,


因此BufferedReader也被称为行读取器


常用的代码:

从控制台输入的话,

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

需要读取文件的话,

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filename,charset)));

需要注意后面的charset为编码方式,中午采用的常见为GB2312和UTF-8。

只验证BufferedReader方法,Writer类似。

参考

(https://blog.csdn.net/wiebin36/article/details/51912794,https://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html,https://www.cnblogs.com/dongrilaoxiao/p/6688107.html)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java输入输出流是构建在基础输入输出流之上的一个抽象概念,它提供了对输入输出操作的高级抽象,可以让程序员更加便捷的进行输入输出操作。Java输入输出流提供了丰富的类,可以操作文件、网络、内存、设备等数据源,它们可以按照字节流或字符流的方式操作数据。 ### 回答2: Java 输入输出流是用于在程序中读取数据和写入数据的机制。在Java中,输入输出流是通过流的方式来实现数据的读取和写入。 输入流用于从外部获取数据,比如从键盘读取用户输入,或从文件中读取数据。常见的输入流有:System.in(标准输入流,即键盘输入)、FileInputStream(文件输入流,读取文件中的数据)等。通过输入流,可以将数据从外部输入到程序中。 输出流用于将程序中的数据输出到外部,比如将数据输出到控制台、写入文件等。常见的输出流有:System.out(标准输出流,即控制台输出)、FileOutputStream(文件输出流,将数据写入到文件中)等。通过输出流,可以将数据从程序中输出到外部。 Java输入流按照读取方式的不同可以分为字节流和字符流。字节流使用字节(8位)为单位进行数据传输,适合处理二进制文件或者文本文件。常见的字节流有:InputStream(字节输入流)、FileInputStream(文件输入流)等。字符流使用字符(16位)为单位进行数据传输,适合处理文本文件。常见的字符流有:Reader(字符输入流)、FileReader(文件字符输入流)等。 Java输出流同样也按照写入方式的不同可以分为字节流和字符流。字节流使用字节(8位)为单位进行数据传输,适合处理二进制文件或者文本文件。常见的字节流有:OutputStream(字节输出流)、FileOutputStream(文件输出流)等。字符流使用字符(16位)为单位进行数据传输,适合处理文本文件。常见的字符流有:Writer(字符输出流)、FileWriter(文件字符输出流)等。 通过使用Java的输入输出流,我们可以在程序中灵活地读取外部数据和将程序数据输出到外部。这为我们处理各种类型的数据提供了方便和灵活性。同时,还需要注意在使用完输入输出流后及时关闭流资源,以避免资源泄露和占用。 ### 回答3: Java 的输入输出流是在程序中进行输入和输出操作的一种方式,用来实现与外部设备的数据传输。 Java 提供了两种常用的输入输出流:字节流和字符流。字节流以字节为单位进行输入输出,字符流以字符为单位进行输入输出。字节流适用于二进制文件的读写,如图像、音频等文件;字符流适用于文本文件的读写。 Java 的输入流用来将外部数据读入程序中,输出流用来将程序的数据输出到外部设备中。 常见的字节输入流有 InputStream 和其子类,如 FileInputStream,用于从文件中读取字节数据;常见的字符输入流有 Reader 和其子类,如 FileReader,用于从文件中读取字符数据。 常见的字节输出流有 OutputStream 和其子类,如 FileOutputStream,用于向文件中写入字节数据;常见的字符输出流有 Writer 和其子类,如 FileWriter,用于向文件中写入字符数据。 使用输入输出流的基本步骤是:创建输入输出流对象,打开数据源或目标文件,根据需要进行读取或写入操作,关闭流。 在读取或写入数据时,可以通过缓冲流来提高效率。BufferedInputStream 和 BufferedOutputStream 是字节缓冲流的实现类,BufferedReader 和 BufferedWriter 是字符缓冲流的实现类。 除了文件输入输出流外,Java 还提供了其他类型的输入输出流,如网络输入输出流和内存输入输出流,用于不同的应用场景。 总之,Java 的输入输出流是一种用于在程序中进行数据读写的方式,提供了丰富的输入输出流类和方法,能够满足不同的需求。熟练掌握输入输出流的使用,对于开发Java应用程序是非常重要的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值