关于缓冲区readLine函数的原理
来源:互联网 发布:linux中rpm命令 编辑:程序博客网 时间:2024/05/17 04:50
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
关于android培训前java基础学习的心得笔记先
第三篇:关于缓冲区readLine函数的原理及使用
readLine(),使用起来特别方便,每次读回来的都是一行,省了很多手动拼接buffer的琐碎;所以比较受程序员们的喜爱。
原以为readLine()是读取到没有数据时就返回null(因为其它read方法当读到没有数据时返回-1),而实际上readLine()是一个阻塞函数,当没有数据读取时,就一直会阻塞在那,而不是返回null;因为readLine()阻塞后,System.out.println(message)这句根本就不会执行到,所以在接收端就不会有东西输出。要想执行到System.out.println(message),一个办法是发送完数据后就关掉流,这样readLine()结束阻塞状态,而能够得到正确的结果,但显然不能传一行就关一次数据流;另外一个办法是把System.out.println(message)放到while循环体内就可以。我后面仿照readLine函数原理自己写的函数就是按照这种方法输出的。另外,readLine()只有在数据流发生异常或者另一端被close()掉时,才会返回null值。如果不指定buffer大小,则readLine()使用的buffer有8192个字符。在达到buffer大小之前,只有遇到"/r"、"/n"、"/r/n"才会返回。
附带实现原理的代码:
import java.io.*;
public class Readline {
public static void main(String[] args){
myBufferedReader myBuf = null;
FileReader fr;
try{
fr = new FileReader("buf.txt");
myBuf = new myBufferedReader(fr);
String line = null;
while((line=myBuf.myReadLine())!=null){
System.out.print(line);
}
}
catch(IOException e){
}
finally{
try{
if(myBuf!=null)
myBuf.myClose();
}catch(IOException e)
{
throw new RuntimeException("关闭读写失败");
}
}
}
}
class myBufferedReader{
private FileReader r;
myBufferedReader(FileReader r){
this.r=r;
}
//自定义一个readLine函数
public String myReadLine() throws IOException{
StringBuilder sb =new StringBuilder();
int ch = 0;
while((ch=r.read())!=-1){
if(ch=='\r')
continue;
if(ch=='\n')
return sb.toString();
else
sb.append((char)ch);
}
return null;
}
public void myClose() throws IOException{
r.close();
}
}
- 关于缓冲区readLine函数的原理
- 关于Console.ReadLine()与缓冲区的问题
- 使用缓冲区复制文本文件及readLine()原理
- 关于Readline函数
- JAVA之旅(二十五)——文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine
- javaseday21(缓冲区 为什么弄个int 和 char[] readLine 的实现原理 如何自己实现)
- Read() 和 ReadLine() 的区别-------缓冲区问题
- 关于getchar函数缓冲区的问题
- 关于getchar函数缓冲区的问题
- 关于缓冲区的函数:1、Flush:
- 关于python open函数缓冲区的问题
- 关于Console.ReadLine()的问题
- 8. readline函数的实现
- 字符读取流缓冲区-读一行的方法readLine()
- 缓冲区溢出的原理
- 缓冲区溢出的原理
- 缓冲区溢出的原理
- readLine方法的原理和案例分析
- ReactiveCocoa入门教程——第二部分
- linux tar 打包排除某些文件、文件夹
- 日语学习之沪江N3基础 20150625 -5
- CGAL半边结构遇到的一些问题
- Firefox OS简介
- 关于缓冲区readLine函数的原理
- 新开项目只保留3.5寸的原因
- android电池系统
- win7下PL/SQL Developer的安装
- NGINX引入线程池 性能提升9倍
- 合并有序链表
- nginx php-fpm安装配置
- 关于oracle数据库的一些基本操作
- gdb调试