java的常见的字符字节处理
2015-12-29 21:11
169 查看
前言:
在最近在学习nio的过程中,温习了以前学习的socket的io处理,发现最基础的处理操作离不开BufferedReader和PrintWriter,他们对应着socket的输入和输出流对象。另外一个问题是PrintWriter和PrintStream的区别。PrintWriter和PrintStream的区别
这个问题,我查了资料,主要在jdk的说明上和在stackoverflow上,下面是二者的总结:PrintWriter实现了PritnStream的所有print方法。对于PrintStream,所有println方法都在内部调用相应的print方法,比如println(charx)的方法体就是调用print(x);再写入一个平台相关的换行符。PrintStream构建时会在内部new一个BufferedWriter,所有print方法都在内部调用这个Writer的write方法(write(String)或write(char[]))——对于print(char[]),直接调用write(char[]);对于其他的print方法,先用String.valueOf获得参数的字符串表示,然后调用write(String)。 对于PrintWriter,所有println方法也都在内部调用print方法,print方法调用write方法。传入OutputStream时,PrintWriter会在内部构造一个BufferedWriter;而传入Writer时,PrintStream内部直接使用该Writer,此时PrintWriter是否进行了缓冲全看该Writer。
上述的内容还需看下源码才能加深映象
BufferedReader进行readLine什么时候返回null
while(reader.ready()) { //执行读取操作,即readLine }
ready是查看流是否已经准备好被读,是一个非阻塞的方法,所以会立刻返回,由于服务器没有准备好被读,所以会立刻返回,所以读取到的都是null。
readLine是一个阻塞的方法,只要没有断开连接,就会一直等待,直到有东西返回,那么什么时候返回空呢,只有读到数据流最末尾,才返回null。
特别要注意的是当reader.readLine已经读完之后,如果继续执行ready操作,会返回false; 因此,下面两段代码可能造成死循环:
while(reader.readLine()!==null){ //执行操作 while(!reader.ready){ //阻塞,等待一段时间 } } while(reader.readLine()!==null){ //执行操作 } while(!reader.ready){ //阻塞,等待一段时间 }
先写这么多,遇到问题在添加!
相关文章推荐
- java 序列化相关
- 具体解释java定时任务
- java中根据调用后台URL得到返回的值(在网页上显示的结果)
- Java能不能继承父类的protected和private方法?
- SparkSql官方文档中文翻译(java版本)
- java批量删除
- 解决NDK开发中Eclipse报错“Unresolved inclusion jni.h”的最终方法
- akka---Getting Started Tutorial (Java): First Chapter
- Java 中4字节形式数据转换为float
- Spring Scope讲解
- SpringMVC的四个基本注解annotation(控制层,业务层,持久层) -- @Component、@Repository @Service、@Controller
- 03 给定链表头结点, 依次输出从尾节点到头结点的数据
- springmvc 国际化
- 12月29日-Eclipse的熟悉
- Java Atomic变量
- 2015/12/29 eclipse应用 输出三角形
- java 集合(6) 选择集合类标准 / Map 接口用法
- java中String的特点,字面对象和构造方法的区别
- spring配置文件头文件的说明
- Java自学之路---DotCom