链接:https:////www.cnblogs.com/tangZH/p/7837992.html

更多精彩链接:http://77blogs.com/?p=142

我在用socket做即时通讯的时候,读取服务器返回的信息用了BufferedReader,用起来挺方便的。

BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line ;
while ((line = br.readLine())!=null){
}
readLine()用起来很方便,每次都是返回一行。
不过该方法有许多值得注意的地方: 一、网络模式:
1、在网络上,readLine()是阻塞模式,也就是说如果readLine()读取不到数据的话,会一直阻塞,而不是返回null,所以如果你想要在while循环后执形相关操作是不可能的,因为while()里面是一个
死循环,一旦读不到数据,它又开始阻塞,因此永远也无法执形while()循环外面的操作,所以应该把操作放在while循环里面。(在我做的即时通讯里,为了能够不断获取服务器返回的消息,就是用这种方法,不断去服务器获取消息
,一旦有就返回。) 2、在while()里面判断readLine()!= null的时候要赋值给一个String,因为如果不为null,那么这时候已经读了一行。如果用while (br.readLine()!=null),那么下面没法再获取到这一行,所以应该用
while ((line = br.readLine())!=null){}

3、readLine()通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行,所以我们在发送数据的时候要再后面加上这些标志符,否则程序会阻塞。而我是直接用下面这种方法:
PrintStream ps = new PrintStream(socket.getOutputStream(), true, "UTF-8");
ps.println()。
ps.println()已经包含换行了,所以不要用print(),若是要就要在后面加上换行符;
 
4、readLine()只有在数据流发生异常或者另一端被close()掉时,才会返回null值。

二、读取文件模式:
1、readLine()什么时候才会返回null呢?读取到文件等的结尾时候。(注意和网络上的是不一样的)。

  • 如果不指定buffer大小,则readLine()使用的buffer有8192个字符。在达到buffer大小之前,只有遇到"/r"、"/n"、"/r/n"才会返回。

readLine()的注意点的更多相关文章

  1. GNU Readline 库及编程简介

    用过 Bash 命令行的一定知道,Bash 有几个特性: TAB 键可以用来命令补全 ↑ 或 ↓ 键可以用来快速输入历史命令 还有一些交互式行编辑快捷键: C-A / C-E 将光标移到行首/行尾 C ...

  2. java中readLine()方法为什么有的行读不到?

    今天在使用java对IO操作时,readLine()输出到控制台的行少了很多.后来发现readLine()实际上是一次读取一行.如果我们不话readLine()读取的行内容赋给一个字符串的话,每直接调 ...

  3. python中read、readline、readlines的区别

    read直接读入整个文件,存成一个字符串变量 readline一行一行读入文件,所以说读取的文件可以大于内存,但是读取的速度很慢 readlines一次读取整个文件,存成一个列表,所以说也必须小于内存 ...

  4. Java网络编程之流——readline()方法的bug

    readline()方法有一个隐含的bug,它不一定会把一个回车看作行的结束.相反,readline()只识别换行或回车/换行对.当在流中检测到回车时,readline()会在继续之前等待,查看下一个 ...

  5. readline,readlines,read函数

    readline是读取每一行,包括'\n'.读出来是一个含'\n'的字符串. realines是读取整个文件,返回所有行的一个list(写代码的时候你需要一个文件的某几行,就可以用这个函数去切分) r ...

  6. 【前端】使用readline模块实现Node.js的输入输出

    'use strict'; function f(x) { // do something... } var readline = require('readline'); //创建readline接 ...

  7. 逐行读取txt文件,使用Linq与StreamReader的Readline方法

    List<string[]> list = File.ReadLines("YourFile.txt") .Select(r => r.TrimEnd('#')) ...

  8. BufferedReader 中的 readLine()

    BufferedReader中的readLine()方法,API解释如下: Reads a line of text. A line is considered to be terminated by ...

  9. 3、python,read(),readlines()和readline()

    我们谈到"文本处理"时,我们通常是指处理的内容. Python 对文件对象的操作提供了三个"读"方法: .read()..readline() 和 .readl ...

  10. BufferedReader readLine()方法

    控制台输入字符串之后回车,后台接收传来的字符串,代码如下: import java.io.BufferedReader; import java.io.IOException; import java ...

随机推荐

  1. LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context: Root WebApplicationContext: startup date [Sun Jan 13 17:59:19 CST 2019]; root of context hierarch

    在运行项目时出现了:LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via ...

  2. hdf 5文件格式及python中利用h5py模块读写h5文件

    h5文件格式,HDF 的版本 5(HDF 版本 5不与 HDF 版本 4 及早期版本兼容).HDF是什么呢?就是Hierarchical Data Format,可以存储不同类型的图像和数码数据的文件 ...

  3. 高清语音技术(WBS)及其在手机和蓝牙耳机中的实现

    高清语音也被称为宽带语音,是一种能为蜂窝网络.移动电话和无线耳机传输高清.自然语音质量的音频技术.与传统的窄带电话相比,高清语音很大程度上提高了语音质量,减少了听觉负担. 通信产业链上的所有网络和设备 ...

  4. PHP之ThinkPHP框架(会话)

    网页会话即是实现页面跳转及数据传递,在web开发中,Cookie和Session的使用是极其重要的,GET和POST是最常使用的页面间数据传递的方法,相对于PHP脚本基础,在ThinkPHP中对网页会 ...

  5. [源码]Python简易http服务器(内网渗透大文件传输含下载命令)

    Python简易http服务器源码 import SimpleHTTPServerimport SocketServerimport sysPORT = 80if len(sys.argv) != 2 ...

  6. 利用 ELK 搭建 Docker 容器化应用日志中心

    利用 ELK 搭建 Docker 容器化应用日志中心 概述 应用一旦容器化以后,需要考虑的就是如何采集位于 Docker 容器中的应用程序的打印日志供运维分析.典型的比如SpringBoot应用的日志 ...

  7. Elasticsearch基本概念及核心配置文件详解

    Elasticsearch5.X,下列的是Elasticsearch2.X系类配置,其实很多配置都是相互兼容的 1. 配置文件 config/elasticsearch.yml 主配置文件 confi ...

  8. SpringBoot 启动概述

    透过现象看本质,SpringApplication 只是将一个典型的Spring应用的启动流程进行了扩展,因此,透彻理解 Spring 容器是打开 Spring Boot 大门的一把钥匙. Sprin ...

  9. Winform下KeyDown,KeyPress,KeyUp事件的总结(转)

    原文: http://www.cnblogs.com/xiashengwang/archive/2011/09/15/2578798.html 在winform程序中,经常会用到这几个事件用于控制数字 ...

  10. entity framework codefirst 用户代码未处理DataException,InnerException基础提供程序在open上失败,数据库生成失败

    警告:这是一个入门级日志,如果你很了解CodeFirst,那请绕道 背景:这篇日志记录我使用Entity FrameWork CodeFirst时出现的错误和解决问题的过程,虽然有点曲折……勿喷 备注 ...