`

黑马程序员21-4: 模拟BufferedReader缓冲原理实现,

 
阅读更多

------- android培训 java培训、期待与您交流!-------



package cn.itcast.p4.io.charstream.mybuffer;

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

/**
 * 自定义的读取缓冲区。其实就是模拟一个BufferedReader.
 * 
 * 分析:
 * 缓冲区中无非就是封装了一个数组,
 * 并对外提供了更多的方法对数组进行访问。
 * 其实这些方法最终操作的都是数组的角标。
 * 
 * 缓冲的原理:
 * 其实就是从源中获取一批数据装进缓冲区中。
 * 在从缓冲区中不断的取出一个一个数据。
 * 
 * 在此次取完后,在从源中继续取一批数据进缓冲区。
 * 当源中的数据取光时,用-1作为结束标记。 
 * 
 * 
 * @author Administrator
 *
 */
public class MyBufferedReader extends Reader {

	private Reader r;
	
	//定义一个数组作为缓冲区。
	private char[] buf = new char[1024];
	
	//定义一个指针用于操作这个数组中的元素。当操作到最后一个元素后,指针应该归零。	
	private int pos = 0;	
	
	
	//定义一个计数器用于记录缓冲区中的数据个数。 当该数据减到0,就从源中继续获取数据到缓冲区中。
	private int count = 0;
	
	
	MyBufferedReader(Reader r){
		this.r = r;
	}
	
	/**
	 * 该方法从缓冲区中一次取一个字符。 
	 * @return
	 * @throws IOException
	 */
	public int myRead() throws IOException{
		
		if(count==0){
			//读一行
			count = r.read(buf);
			pos = 0;
		}
		if(count<0)
			return -1;
		//pos=0时,buf[pos++]就是buf[0],赋值后pos再++
		char ch = buf[pos++];
		
		count--;
		
		return ch;
		
		/*
		//1,从源中获取一批数据到缓冲区中。需要先做判断,只有计数器为0时,才需要从源中获取数据。
		if(count==0){
			count = r.read(buf);
			
			if(count<0)
				return -1;
			
			//每次获取数据到缓冲区后,角标归零.
			pos = 0;
			char ch = buf[pos];
			
			pos++;
			count--;
			
			return ch;
			//一个个取
		}else if(count>0){
			
			char ch = buf[pos];
			
			pos++;
			count--;
			
			return ch;
			
		}*/
		
	}
	
	public String myReadLine() throws IOException{
		
		StringBuilder sb = new StringBuilder();
		
		int ch = 0;
		while((ch = myRead())!=-1){
			
			if(ch=='\r')
				continue;
			if(ch=='\n')
				return sb.toString();
			//将从缓冲区中读到的字符,存储到缓存行数据的缓冲区中。
			sb.append((char)ch);
			
		}		
		
		if(sb.length()!=0)
			return sb.toString();
		return null;
	}

	public void myClose() throws IOException {
		
		r.close();
	}

	@Override
	public int read(char[] cbuf, int off, int len) throws IOException {
		
		return 0;
	}

	@Override
	public void close() throws IOException {
	}
}



package cn.itcast.p4.io.charstream.mybuffer;

import java.io.FileReader;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;

public class MyBufferedReaderDemo {

	/**
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {

		FileReader fr = new FileReader("buf.txt");
		
		MyBufferedReader bufr = new MyBufferedReader(fr);
		
		String line = null;
		
		while((line=bufr.myReadLine())!=null){
			System.out.println(line);
		}
		
		bufr.myClose();
		
		
		Collections.reverseOrder();
		HashMap map = null;
		map.values();
		
		
	}

}




------- android培训 java培训、期待与您交流!-------


详细请查看:http://edu.csdn.net/heima -------
分享到:
评论

相关推荐

    黑马程序员面试宝典(java)2018版

    《黑马程序员面试宝典(java)2018版》是一本专门为Java开发者准备的面试指南,涵盖了大量在面试过程中可能遇到的问题和知识点。这本宝典由黑马程序员机构精心编纂,汇集了近万名学员的实际面试经验,为求职者提供了...

    2018最新版Java程序员面试宝典+题库

    这本书由"黑马程序员"机构出品,专门针对Java开发者在求职过程中的需求,帮助他们在面试中展现出扎实的技术功底。 1. **Java基础** - 类与对象:深入理解面向对象编程的基本概念,包括封装、继承、多态。 - 数据...

    java教材课后习题答案

    - 缓冲流:BufferedReader和BufferedWriter的效率提升。 5. **多线程** - 线程创建:通过Thread类或实现Runnable接口创建线程。 - 线程同步:synchronized关键字、wait()、notify()和notifyAll()的使用。 - ...

    javaIO(java中的流的介绍)

    - FilterReader 和 FilterWriter 用于包装字符流,例如BufferedReader和BufferedWriter增加了缓冲功能,提高效率。 总的来说,Java IO通过流的概念,为开发者提供了灵活且强大的数据处理能力,能够适应各种输入...

    java试题(非武大)

    - 缓冲流:BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream。 - 对象序列化与反序列化:ObjectInputStream、ObjectOutputStream。 8. **Java EE** - servlet:处理HTTP请求的Java...

    模拟面试 Java题目以及答案

    - 缓冲流:BufferedReader,BufferedWriter。 - NIO(New IO):通道,缓冲区,选择器。 8. **反射API**: - Class类:获取类信息,创建对象,访问成员。 - 构造器,方法,字段的反射操作。 9. **网络编程**:...

    java程序员必读--基础篇

    I/O流是处理输入输出的关键,Java提供了丰富的流类库,如FileInputStream和FileOutputStream用于文件操作,BufferedReader和PrintWriter用于字符流处理,网络编程中的Socket和ServerSocket则用于网络数据交换。...

    poj与leetcode-AlgorithmComplete:数据结构、算法及常见面试题:java实现

    《poj与LeetCode——数据结构、算法及常见面试题:Java实现》是针对程序员提升算法能力和解决实际问题的一份宝贵资源。这个项目主要涵盖了在编程竞赛如POJ(Programming Online Judge)和在线编程平台LeetCode上的...

    android系统信息(内存、cpu、sd卡、电量、版本)获取.txt

    BufferedReader localBufferedReader = new BufferedReader(fr, 8192); while ((str2 = localBufferedReader.readLine()) != null) { Log.i(TAG, "---" + str2); } } catch (IOException e) { // 处理异常 } ...

    JAVA面试题集编程篇

    - 缓冲流:理解BufferedReader和BufferedWriter的作用,提高读写效率。 - 转换流:使用InputStreamReader和OutputStreamWriter进行字符编码转换。 7. **多线程**: - 线程的创建:通过Thread类和Runnable接口...

    java范例大全

    - 缓冲流:BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter提高IO效率。 - 转换流:InputStreamReader、OutputStreamWriter用于字节流和字符流之间的转换。 6. **多线程**: - ...

    一份超级详细的Java面试题【大厂面试真题+Java学习指南+工作总结】

    - 缓冲流:BufferedReader、BufferedWriter、BufferedInputStream等。 - NIO(New IO):通道、缓冲区、选择器的概念和用法。 7. **反射与注解** - 反射:动态获取类信息,创建对象,调用方法。 - 注解:自定义...

    JAVA程序员必读--基础篇

    【JAVA程序员必读--基础篇】是一份专为初学者设计的Java编程教程,它深入浅出地介绍了Java语言的基础概念和核心语法,是面向对象编程的入门佳选。这份资料精心编排,旨在帮助新手快速掌握Java编程的核心技能。 在...

    java面试经典试题

    - 缓冲流:BufferedReader和BufferedWriter的使用。 7. **网络编程**: - Socket编程:了解TCP和UDP的基本原理,如何建立和关闭连接。 - HttpURLConnection:HTTP请求的发送和接收。 8. **JVM**: - 内存模型...

    Java程序员面试的试题集

    - 缓冲流:提高读写效率,如BufferedReader和BufferedWriter。 - 转换流:连接字节流和字符流,如InputStreamReader和OutputStreamWriter。 7. **多线程**: - 线程的创建:Thread类和实现Runnable接口的方式。 ...

    java 高级理论-4

    - 缓冲流:学习BufferedReader和BufferedWriter提高读写效率的方法。 - 转换流:理解InputStreamReader和OutputStreamWriter的角色。 6. **反射**: - 类的动态加载:通过Class类获取类的信息。 - 动态创建对象...

    java程序员笔试面试宝典(一典在手,面试无忧)

    Java程序员在求职过程中,面试和笔试是至关重要的环节。这份"java程序员笔试面试宝典"旨在为准备面试的开发者提供全面而深入的Java知识体系,帮助他们在应聘过程中展现出扎实的技术功底。以下是一些可能涉及的重要...

    java面试笔试题库.rar

    - 缓冲流:了解BufferedReader和BufferedWriter的优化作用。 - 对象序列化:理解如何将对象转换为字节流进行持久化存储。 8. **反射机制**: - Class类:通过Class对象获取类的信息,包括构造器、方法和字段。 ...

    java输入输出流.ppt

    - BufferedReader:提供缓冲的字符读取,可以按行读取文本。 - FileReader:直接从文件读取字符数据。 **输出流(OutputStream和Writer)** - OutputStream是所有字节输出流的基类,例如: - ...

Global site tag (gtag.js) - Google Analytics