IO流-用Reader模拟BufferedReader()的readLine()功能

package mybufferedreader;

import java.io.IOException;
import java.io.Reader;

/*
 * 用Reader模拟BufferedReader()的readLine()功能
 * 
 * readLine():一次读取一行,根据换行符判断是否结束,只返回内容,不返回换行符
 */
public class MyBufferedReader {
	private Reader r;

	public MyBufferedReader(Reader r) {
		this.r = r;
	}

	/*
	 * 思考:写一个方法,返回值是一个字符串。
	 */
	public String readLine() throws IOException {
		/*
		 * 我要返回一个字符串,我该怎么办呢? 我们必须去看看r对象能读取什么东西呢? 两个读取方法,一次读取一个字符或者一次读取一个字符数组
		 * 那么,我们要返回一个字符串,用那个方法比较好呢? 我们很容易想到字符数组比较好,但是问题来了,就是这个数组的长度是多长呢?
		 * 根本就没有办法定义数组的长度,你定义多长都不合适。 所以,只能选择一次读取一个字符。
		 * 但是呢,这种方式的时候,我们再读取下一个字符的时候,上一个字符就丢失了。 所以,我们又应该定义一个临时存储空间把读取过的字符给存储起来。
		 * 这个用谁比较合适呢?数组、集合、字符串缓冲区三个可供选择。
		 * 经过简单的分析,最终选择使用字符串缓冲区对象。并且使用的是StringBuilder
		 */
		StringBuilder sb = new StringBuilder();

		// 做这个读取最麻烦的是判断结束,但是在结束之前应该是一直读取,直到-1
		/*
		 * hello world java
		 * 
		 * 104101108108111 119111114108100 1069711897
		 */
		int ch = 0;
		while ((ch = r.read()) != -1) {// 104,101,108,108,111
			// if (ch == '\r') {
			// continue;
			// }

			if (ch == '\n') {
				return sb.toString();// hello
			} else {
				sb.append((char) ch);// hello
			}

			// 为了防止数据丢失,判断sb的长度不能大于0
			if (sb.length() > 0) {
				return sb.toString();
			}
		}
		return null;
	}

	/*
	 * 先写一个关闭方法
	 */
	public void close() throws IOException {
		this.r.close();
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: bufferedreader.readline是Java中的一个方法,用于从输入流中读取一行文本。它会一直读取,直到遇到换行符或者文件结束符。读取到的文本会包括换行符在内,并返回一个字符串。如果输入流已经结束,则返回null。 ### 回答2: BufferedReader是Java IO类库中的一个类,它的作用是读取字符流,比如从文件或网络中读取。readLine() 方法是BufferedReader类中的一个方法,用来读取一行文本。在读取文本时,会从输入流中读取字符,直到遇到换行符为止。然后将这一行文本返回给调用者。如果输入流已经结束,就返回null。 读取一行文本的过程中,BufferedReader会自动去除行末的换行符。用readLine()方法读取文件时,可以逐行读取文件内容,也可以在while循环中多次调用,从而逐行读取文件: 例子: BufferedReader reader = new BufferedReader(new FileReader("example.txt")); String line = null; while ((line = reader.readLine()) != null) { System.out.println(line); } 在上面的例子中,我们实例化了一个BufferedReader对象,并用它来读取文件example.txt中的内容。在while循环中,我们调用readLine()方法来读取文件的每一行内容。读取到的行字符串被赋值给变量line,如果这一行内容不为空,打印出来。 需要注意的是,读取文件时需要捕获IOException(如下)。 例子: try { BufferedReader reader = new BufferedReader(new FileReader("example.txt")); String line = null; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch(IOException e) { e.printStackTrace(); } 总的来说,readLine()方法是非常方便的,特别是读取文本文件时。它不仅可以在while循环中多次调用,也可以读取单一行内容。值得一提的是,该方法在读取大型文本文件时可能会出现性能问题。 ### 回答3: BufferedReader.readLine()是Java中输入流的方法之一,它的作用是从输入流中读取一行字符,直到遇到回车换行符或者文件结束。其返回值是一个String类型的字符串,即读取到的一行字符。 BufferedReader.readLine()方法通常是用于读取文本文件中的数据,这种方法相比于一次性读取全部数据的方法更具有优势,因为它可以逐行读取数据,避免一次性读取数据导致内存溢出的问题。在读取大型文本文件时,使用readLine()方法可以优化程序的处理效率。 在BufferedReader.readLine()方法使用过程中,需要注意以下几点: 1. 读取到的字符串中不包含回车换行符,如果需要保留回车换行符,可以使用BufferedWriter.write()方法输出。 2. 读取到的字符串的长度是动态的,通过调用String.length()方法可以获取每行字符串的长度。 3. 如果读取到的文件已经到达结尾,readLine()方法将会返回null值。 总的来说,BufferedReader.readLine()方法是Java中输入流的一个重要方法,它可以方便地从文本文件中逐行读取数据,同时还可以避免内存溢出的问题,因此在编写Java程序时,深入理解和掌握该方法的使用将有助于提高程序的处理效率和准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值