使用Reader模拟实现BufferedReader效果

我们都知道BufferedReader是一个缓冲区的读取流,内部需要读取功能的成员,也就是Reader的子类。我么可以这样实现:

1:内部定义字符数组,相当于缓冲区,提高了效率

2:操作数组的下标

3:统计字符的个数

public class Demo11 {

	public static void main(String[] args) throws IOException 

{<pre name="code" class="java"><span style="white-space:pre">		</span>//创建输入流

FileReader fr = new FileReader("src/temp.txt");


		MyBufferedReader mbr = new MyBufferedReader(fr);
		// int num = 0;
		// while ((num = mbr.myRead()) != -1) {
		// System.out.print((char) num);
		// }

		String line = null;
		while ((line = mbr.myReadLine()) != null) {
			System.out.println(line);
		}
		mbr.myClose();
	}
}

class MyBufferedReader {
	private Reader r; // 真正读取功能的类
	private char[] arr = new char[512];// 相当于缓冲区
	private int index; // 数组下标
	private int count; // 统计缓冲区中字符个数

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

	// 实现一次读取一个的功能
	public int myRead() throws IOException {
		// 缓冲区中是否有数据
		if (count == 0) {
			// 从文件中读取数据到缓冲区,返回值读取的

字符数
			count = r.read(arr);
			index = 0; // 下标为0
		}
		if (count < 0) // 文件末尾
			return -1;
		// 从缓冲区中读取一个字符
		int num = arr[index];
		index++;// 下标+1
		// 数量-1
		count--;
		return num;

	}

	// 一次读取一行
	public String myReadLine() throws IOException {
		StringBuilder sb = new StringBuilder();
		int num;
		while ((num = myRead()) != -1) {//只要是没有读到一句话的末尾那么就继续读
			if (num == '\r')//如果是遇到的空格那么就继续
				continue;
			else if (num == '\n')//如果是换行的话那么就停止读取 返回本行的文字
				return sb.toString();
			else
				sb.append((char) num);
		}
		return null;
	}

	// 关闭流
	public void myClose() throws IOException {
		r.close();
	}
}

这样我们就实现了模拟BufferedReader的效果。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-05 04:29:29

使用Reader模拟实现BufferedReader效果的相关文章

在WPF中使用PlaneProjection模拟动态3D效果

原文:在WPF中使用PlaneProjection模拟动态3D效果 虽然在WPF中也集成了3D呈现的功能,在简单的3D应用中,有时候并不需要真实光影的3D场景.毕竟使用3D引擎会消耗很多资源,有时候使用各种变换和假的阴影贴图也能设计出既省资源,又有很好用户体验的“伪”3D界面. 在Silverlight中,因为性能问题,一般并不使用真3D引擎,微软为Silverlight提供了System.Windows.Media.PlaneProjection 类,用投影变换来模拟3D的效果. 下面让我们看

静态书架和js模拟翻书效果

书籍图片随便找了个,有点难看,须要的自己替换个好看点的png格式图片 源代码下载:http://download.csdn.net/detail/sweetsuzyhyf/7604091 静态书架和js模拟翻书效果,布布扣,bubuko.com

利用HTML5云存储实现模拟对比投票效果

<!DOCTYPE HTML> <html> <head> <title>模拟对比投票效果</title> <meta name="description" content="HTML5Web存储" /> </head> <body> <span>能(<a href="javascript:;" id="btn"&

HTML5 模拟现实物理效果

Ball Pool 是一个基于 HTML5 技术的实验,模拟现实物理效果,让你在 Web 中感受自然物体的运动.玩法介绍:可以随意拖动圆球.点击页面背景.晃动浏览器.双击页面背景或者按住鼠标左键,有不同的效果,赶紧来体验一下. 源码下载     在线演示

模拟现实物理效果

<p><!doctype html>HTML5 模拟现实物理效果,感受 Web 技术魅力</p> <style><!-- body { overflow: hidden; background-color: #000000; user-select: none; -webkit-user-select: none; -moz-user-select: none; -o-user-select: none; -ms-user-select: none;

模拟炮弹动画效果,平移动画

本程序是模拟子弹无限的弹出平移的动画效果 知识点:(难点) 0,masony自适应布局(下载地址:https://github.com/Masonry/Masonry) 1,循环创建等间距的View 2,向可变数组中添加和取出这些View 3,定时器 4,循环执行 5,循环执行平移 6,加速和减速 感谢金ML小姐的无私帮助,接下来直接上代码: // //  ViewController.m //  模拟炮弹的实现 // //  Created by WBapple on 16/8/23. // 

Box2D物理引擎模拟炸弹爆炸效果

今天咱们来模拟炸弹效果.于是问题一来了:"为什么要模仿这么暴力的效果呢?莫非几日不见,Yorhom人品煞变?" 其实玩过愤怒的小鸟的同学都应该对这种效果似曾相识,因为据非官方报道,第二厉害的小鸟--黑色鸟的特技就是自爆.问题二出现了:"那第一厉害的小鸟是哪一种呢?"据Yorhom我本人测试,那只红色大鸟应该是最厉害的,不过貌似没有特技?愤怒的小鸟这种肤浅的游戏,Y某我最擅长了,以后有时间会专门写写这个游戏的攻略.这两种鸟的靓照如下: 敷衍了问问题二的同学,问题三就来

Echarts (option.legend) 图例的属性,外部控制图例的select状态,以达到模拟图例的效果

先列举一些常用的属性: legend: { //图例,这里基本都是默认设置,就不一一列举,echarts 官网很好找 type: "plain", //'plain':普通图例.缺省就是普通图例.'scroll':可滚动翻页的图例.当图例数量较多时可以使用. show: true, //是否显示(隐藏和显示)柱子的那个按钮,默认true,如果不需要可以设置为false.如果没有请忽略. selectedMode: true, //图例上的点击事件,不写默认true ,设置false为不

绝对定位模拟固定定位效果...

今天下班,突然发现同学在群里求救解决固定定位在移动端偏移的问题,本屌丝猛地一颤:那一天,我终于回想起来了,曾经一度被ios固定定位失效所支配的恐怖,还有被市场妹子一脸嘲讽的看着的那份屈辱...(本屌意淫一下巨人). 真是情况就是,ios对固定定位的支持有点奇葩,当固定定位的层里有input一类的能调动虚拟键盘的元素时,一旦用户聚焦这些元素,固定定位的层级中的元素会发生位移,也就是俗称的页面错乱了,本屌当时寻遍网上各种方案,试了大半天时间(其实,就是因为没钱穷屌丝一枚,没有水果手机,每次测试都要厚