BufferedReader中read和readLine方法总结

实例如下所示:

package day0208;

import java.io.FileReader;

import java.io.IOException;

/*

* 自定义读取缓冲区,实现BufferedReader功能

* 分析:

* 缓冲区就是封装了一个数组,并对外提供了更多的方法对数组进行访问

* 其实这些方法最终操作的都是数组的角标

* 缓冲的原理:

* 其实就是从源中获取一批数据装进缓冲区,再从缓冲区取出数据

* 当此次取完后,继续从源中取出一批数据到缓冲区

* 当源中的数据取光时,用-1作为结束标记。

*/

public class MyBufferReader {

private FileReader r;

MyBufferReader(FileReader r){

this.r=r;

}

//定义一个数组作为缓冲区

private char[] buf=new char[1024];

//定义个指针用于操作这个数组的元素,当操作到最后一个元素后,指针应该归零

private int pos=0;

//定义一个计数器,用于记录缓冲区中的数据个数,当该数据减到0,就从源中继续获取数据到缓冲区中。

private int count =0;

public int myRead() throws IOException{//自定义read方法

if(count==0){//如果缓冲区中没有数据,则从源中获取一批数据到缓冲区

count=r.read(buf);

pos=0;

}

if(count<0){

return -1;

}

char ch=buf[pos++];//一次从缓冲区获取一个字符

count--;

return ch;

}

public String myReadLine() throws IOException{//自定义readLine犯法

StringBuilder sb=new StringBuilder();

int ch=0;

while((ch=myRead())!=-1){//只要还有数据就进行读取

if(ch=='\n')//java换行符,停止读取,将已经读取到的数据输出返回

return sb.toString();

if(ch=='\r')

continue;//window下的换行符,不读也不换行,继续读取后面的字符

sb.append((char)ch);//正常情况下,不断进行读取

}

if(sb.length()!=0)//如果文档中中有字符,就返回读取到的数据

return sb.toString();

return null;//如果是空文档,就返回空

}

public void myClose() throws IOException{

r.close();//关闭流资源

}

}

这样就Ok了,可以进行检测

package day0208;

import java.io.FileReader;

import java.io.IOException;

public class MyDemo {

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

FileReader fw=new FileReader("C:\\demo2.txt");

MyBufferReader br=new MyBufferReader(fw);

String line1=null;

while((line1=br.myReadLine())!=null){

System.out.println(line1);

}

// int num=0;

// while((num=br.myRead())!=-1){

// System.out.print((char)num);

// }

br.myClose();

}

}

两种检测方法都可以。

自定义BufferedReader的实例

缓冲区的建立目的就是增加传输性能,使我们传输数据更加快速

缓冲区的内部其实很简单 就是在内部封装了一个数组 用数组来存储数据 对外提供一些方法对数组进行访问

其中这些方法的操作就是对数组的指针(角标)。

缓冲区的原理:从源中获取一批数据到缓冲区,再从缓冲区中一个一个取出 取完后用-1作为结束标记

在BufferedReader中我们读取数据方法有read() ,readLine()

read() 其参数为char[],cbuf,int off,int len。其返回值为-1

readLine()方法是一行一行的取 其内部就像是一个字符串容器StringBuffder 其返回值为null;

首先定义一个类 在类中定义两个读取数据的方法 MyReader(),MyReadLine();

public class MyBufferedReader {

private FileReader fr;

private char[] buff = new char[1024];

private int zz = 0;

private int count = 0;

MyBufferedReader(FileReader fr){

this.fr = fr;

}

public int MyRead() throws IOException{

if(count==0){

count = fr.read(buff);

zz =0;

}

if(count<0)

return -1;

char ch = buff[zz++];

count--;

return ch;

}

public String MyReadLine() throws IOException{

StringBuilder stb = new StringBuilder();

int ch = 0;

while((ch=MyRead())!=-1){

if(ch=='\r')

continue;

if(ch=='\n')

return stb.toString();

stb.append((char)ch);

}

if(stb.length()!=0)

return stb.toString();

return null;

}

public void MyClose() throws IOException{

fr.close();

}

}

里面我定义了指针zz 和一个缓冲区计数器count来记录缓冲区内读取数据的变化

当count==0时 就往缓冲区内读入数据 zz为0 从第一个数开始读

小于0时数据读取完毕 返回-1

在MyReadLine()中 创建一个字符串容器StringBuilder 来存储数据党stb==\n时 一行读取完毕其返回值为null;

以上这篇自定义BufferedReader的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

java中readline函数_自定义BufferedReader中read和readLine方法相关推荐

  1. sql中len函数_在SQL中使用LEN(),ROUND()函数

    sql中len函数 LEN() and ROUND() are scalar functions which return a single value, based in the input val ...

  2. python中execute函数_在excel中调用python函数

    效果: 通过excel引用在py文件中写好的load_settle()函数,可以快捷的获取对应的历史结算价. 使用方法: 1.首先安装office,我用的是2016版本. 2.安装python,推荐使 ...

  3. matlab中find函数_在R中使用Matlab函数

    R, Matlab MATLAB是一款商业数学软件, R是一个拥有庞大工具库的数据统计.建模.可视化分析软件.R 不仅支持C/C++, python代码的运行和工程移植, 也支持在R中使用MATLAB ...

  4. python中transpose函数_对numpy中的transpose和swapaxes函数详解

    transpose() 这个函数如果括号内不带参数,就相当于转置,和.T效果一样,而今天主要来讲解其带参数. 我们看如下一个numpy的数组: `arr=np.arange(16).reshape(( ...

  5. python中编函数_在python中编写函数

    Aaron Hall.. 10 递归实现 这是一个相当优雅的递归实现,为了清晰起见,它使用了Python 3的功能: def strict_compose(*funcs): *funcs, penul ...

  6. python中strptime函数_在Python中操作时间之strptime()方法的使用

    strptime()方法分析表示根据格式的时间字符串.返回值是一个struct_time所返回gmtime()或localtime(). 格式参数使用相同的指令使用strftime();它默认为&qu ...

  7. python中fill函数_在figu中旋转matplotlib的fill函数

    我在试着做一个三人合谋.其中一个绘图框相对于另一个旋转90度,并垂直于另一个绘图的轴.所以我可以在这个帧中绘制一个直方图图,但是当我使用kde生成数据并使用fill覆盖到{}时,它不会旋转.在impo ...

  8. python中execute函数_在python中函数的调用

    """BMI指数(即身体质量指数,简称体质指数又称体重,英文为BodyMassIndex,简称BMI)"""def fun_bmi(pers ...

  9. python中延时函数_推迟python中的函数

    要在延迟后执行函数或使用事件循环(无线程)在给定的秒数内重复函数,您可以: Tkinter的 #!/usr/bin/env python from Tkinter import Tk def foo( ...

最新文章

  1. 客快物流大数据项目(四):大数据项目为什么使用Docker
  2. ECMAScript Query实例
  3. 【Transformer】Augmented Shortcuts for Vision Transformers
  4. vue 字典_【开源】基于Vue的前端组件库HeyUI
  5. GCC,GDB,Makefile
  6. 浅谈Cisco ASA的基础
  7. verilog读入.txt的有符号十进制数,把有符号十进制数写入到.txt文件中
  8. jquery.hotkeys监听键盘按下事件keydown
  9. 【UVA10256】The Great Divide(凸包相离判定)
  10. 冒泡排序 图解+python实现
  11. unity3d场景制作
  12. 基于JQuery网页漂浮广告窗口Js详解
  13. 中秋节快乐ooooo
  14. 电脑桌面不见了怎么办?只能调出任务管理器!
  15. 台式计算机文件打不开怎么回事,电脑文件打不开是怎么回事 电脑Word文档打不开怎么处理...
  16. js整数向上取整(自定义取整几位)
  17. 定时器实验循环彩灯C语言,单片机实验三-定时器实验
  18. chrony时间同步
  19. Ubuntu 14.04更新源
  20. map方法的常见使用

热门文章

  1. 程序员最想得到的十大证件
  2. 如何对待逐渐疏远的朋友?
  3. tf.truncated_normal_initializer 从截断的正态分布中输出随机值。
  4. 不仅有骁龙8 Plus!摩托罗拉新旗舰还要抢首发2亿像素
  5. 苏宁:已完成偿还员工借款本金的1% 力争在2022年6月30日前全部还完
  6. 三星电子时隔近3年再次成为全球最大半导体厂商
  7. realme Pad通过认证:搭载7100mAh大容量电池
  8. 100家店干翻17000家药店!刘强东最恐惧的对手来了!
  9. 魅族营销翻车,被骂上热搜,官博致歉并暂停运营两天...
  10. 帮助罕见病患者买得到药 京东健康上线“罕见病关爱中心”