java中readline函数_自定义BufferedReader中read和readLine方法
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方法相关推荐
- sql中len函数_在SQL中使用LEN(),ROUND()函数
sql中len函数 LEN() and ROUND() are scalar functions which return a single value, based in the input val ...
- python中execute函数_在excel中调用python函数
效果: 通过excel引用在py文件中写好的load_settle()函数,可以快捷的获取对应的历史结算价. 使用方法: 1.首先安装office,我用的是2016版本. 2.安装python,推荐使 ...
- matlab中find函数_在R中使用Matlab函数
R, Matlab MATLAB是一款商业数学软件, R是一个拥有庞大工具库的数据统计.建模.可视化分析软件.R 不仅支持C/C++, python代码的运行和工程移植, 也支持在R中使用MATLAB ...
- python中transpose函数_对numpy中的transpose和swapaxes函数详解
transpose() 这个函数如果括号内不带参数,就相当于转置,和.T效果一样,而今天主要来讲解其带参数. 我们看如下一个numpy的数组: `arr=np.arange(16).reshape(( ...
- python中编函数_在python中编写函数
Aaron Hall.. 10 递归实现 这是一个相当优雅的递归实现,为了清晰起见,它使用了Python 3的功能: def strict_compose(*funcs): *funcs, penul ...
- python中strptime函数_在Python中操作时间之strptime()方法的使用
strptime()方法分析表示根据格式的时间字符串.返回值是一个struct_time所返回gmtime()或localtime(). 格式参数使用相同的指令使用strftime();它默认为&qu ...
- python中fill函数_在figu中旋转matplotlib的fill函数
我在试着做一个三人合谋.其中一个绘图框相对于另一个旋转90度,并垂直于另一个绘图的轴.所以我可以在这个帧中绘制一个直方图图,但是当我使用kde生成数据并使用fill覆盖到{}时,它不会旋转.在impo ...
- python中execute函数_在python中函数的调用
"""BMI指数(即身体质量指数,简称体质指数又称体重,英文为BodyMassIndex,简称BMI)"""def fun_bmi(pers ...
- python中延时函数_推迟python中的函数
要在延迟后执行函数或使用事件循环(无线程)在给定的秒数内重复函数,您可以: Tkinter的 #!/usr/bin/env python from Tkinter import Tk def foo( ...
最新文章
- 客快物流大数据项目(四):大数据项目为什么使用Docker
- ECMAScript Query实例
- 【Transformer】Augmented Shortcuts for Vision Transformers
- vue 字典_【开源】基于Vue的前端组件库HeyUI
- GCC,GDB,Makefile
- 浅谈Cisco ASA的基础
- verilog读入.txt的有符号十进制数,把有符号十进制数写入到.txt文件中
- jquery.hotkeys监听键盘按下事件keydown
- 【UVA10256】The Great Divide(凸包相离判定)
- 冒泡排序 图解+python实现
- unity3d场景制作
- 基于JQuery网页漂浮广告窗口Js详解
- 中秋节快乐ooooo
- 电脑桌面不见了怎么办?只能调出任务管理器!
- 台式计算机文件打不开怎么回事,电脑文件打不开是怎么回事 电脑Word文档打不开怎么处理...
- js整数向上取整(自定义取整几位)
- 定时器实验循环彩灯C语言,单片机实验三-定时器实验
- chrony时间同步
- Ubuntu 14.04更新源
- map方法的常见使用
热门文章
- 程序员最想得到的十大证件
- 如何对待逐渐疏远的朋友?
- tf.truncated_normal_initializer 从截断的正态分布中输出随机值。
- 不仅有骁龙8 Plus!摩托罗拉新旗舰还要抢首发2亿像素
- 苏宁:已完成偿还员工借款本金的1% 力争在2022年6月30日前全部还完
- 三星电子时隔近3年再次成为全球最大半导体厂商
- realme Pad通过认证:搭载7100mAh大容量电池
- 100家店干翻17000家药店!刘强东最恐惧的对手来了!
- 魅族营销翻车,被骂上热搜,官博致歉并暂停运营两天...
- 帮助罕见病患者买得到药 京东健康上线“罕见病关爱中心”