据悉,外界对程序员的印象不是木讷就是死板,不是最笨就是不爱说话,不是宅就是闷骚.昨天我们老左批评我说,自从你写了程序了,你以前的优点都退化了.放在去年,我还觉得我没什么啊,程序员就是这样啊,那是因为我专注,我热爱,我就要做一个程序员. 但现在不那么想了,程序员就不能有很好的与人沟通的能力了?程序员就不能有强壮的体魄了?程序员就必须丢掉自己的开朗吗?这些真的都不属于程序员了吗?那些都是我的借口,是我自己以程序员自居,包庇了自己.那些木讷的不懂说话的是不够优秀的程序员(不包括爱因斯垣那种程序员奥).…
通过socket测试工具在电脑上发送消息,Android真机可以收到响应BufferedReader.ready()返回true,但是readline却一直阻塞. 原因:readline()只有在遇到换行符的时候才会结束,因为发消息的时候加一个换行符即可. 测试工具下载地址:http://files.cnblogs.com/files/feijian/SocketTool.rar 附上我的socket客户端代码: public class QpushClient implements Runna…
同步I/O模型的弊端===>每一个线程的创建都会消耗服务端内存,当大量请求进来,会耗尽内存,导致服务宕机 伪异步I/O的弊端分析===>当对Socket的输入流进行读取操作的时候,它会一直阻塞下去,知道发生如下三件事情(1)有数据可读(2)可用数据已经读取完毕(3)发生空指针或者I/O异常===>这意味着当对方发送请求或应答消息比较缓慢,或者网络传输比较慢时候,读取输入流的一方的通信线程将被长时间阻塞.在阻塞期间,其他接入的消息只能在消息队列中排队.===>伪异步I/O实际上仅仅只…
关于socket.getOutputStream() 的一些问题, OutputStream的flush是一个空方法,所以需要另一个实现了Flush的流来包装一下 这里为什么使用PrintWriter,而不使用BufferedWriter 原因是在接收方使用BufferedReader 的readLine,而BufferedWriter.write并不会自动换行,所以会导致读取阻塞,需要手动换行,代码如下: BufferedWriter bw = new BufferedWriter(new O…
原文 虽然写IO方面的程序不多,但BufferedReader/BufferedInputStream倒是用过好几次的,原因是: 它有一个很特别的方法:readLine(),使用起来特别方便,每次读回来的都是一行,省了很多手动拼接buffer的琐碎: 它比较高效,相对于一个字符/字节地读取.转换.返回来说,它有一个缓冲区,读满缓冲区才返回:一般情况下,都建议使用它们把其它Reader/InputStream包起来,使得读取数据更高效. 对于文件来说,经常遇到一行一行的,特别相符情景. 这次是在蓝…
BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用socket.close()关闭不需要的socket. 从一个有若干行的文件中依次读取各行,处理后输出,如果用以下方法,则会出现除第一行外行首字符丢失现象. String str  = null;br=new BufferedReader(new FileReader(fileName));do{  str…
BufferedReader的readLine()方法是阻塞式的, 如果到达流末尾, 就返回null, 但如果client的socket末经关闭就销毁, 则会产生IO异常. 正常的方法就是使用socket.close()关闭不需要的socket. 从一个有若干行的文件中依次读取各行,处理后输出,如果用以下方法,则会出现除第一行外行首字符丢失现象 String str  = null;br=new BufferedReader(new FileReader(fileName));do{  str…
1. BIO JDK5之前, JDK的IO模式只有BIO(同步阻塞)问题: 因为阻塞的存在, 需对每个请求开启一个线程. 过多的线程切换影响操作系统性能解决: 使用线程池, 处理不过来的放入队列, 再处理不过来的会触发其他机制问题: 超过线程池数量的请求需要等待 public class Client { final static String ADDRESS = "127.0.0.1"; final static int PORT = 8765; public static void…
虽然写IO方面的程序不多,但BufferedReader/BufferedInputStream倒是用过好几次的,原因是: 它有一个很特别的方法:readLine(),使用起来特别方便,每次读回来的都是一行,省了很多手动拼接buffer的琐碎: 它比较高效,相对于一个字符/字节地读取.转换.返回来说,它有一个缓冲区,读满缓冲区才返回:一般情况下,都建议使用它们把其它Reader/InputStream包起来,使得读取数据更高效. 对于文件来说,经常遇到一行一行的,特别相符情景. 这次是在蓝牙开发…
缺点:一个线程只能处理一个客户端连接 服务端: public class TimeServer { public static void main(String[] args) throws IOException { int port = 8080; ServerSocket server = null; try { server = new ServerSocket(port); System.out.println("The time server is start in port : &…