Java Read()阻塞的一种处理方式
java.io.InputStream的read()方法描述:
If no byte is available because the end of the stream has been reached, the value -1 is returned.
到达流的末尾真会放回-1吗?
文件读写中可以返回-1
Socket通讯则有一说,很奇怪我发现c语言似乎读到数据流结尾可以得到-1;而Java中则比较难得到-1,读不到数据时候read()会一直阻塞中,从JDK1.4后很多人是用java.nio,那是另一个话题。
读取socket流中数据,根据-1判断是不现实的(通常定义各自通讯协议),这里没有考虑网络断掉情形,直接读取数据,关键问题就是考虑什么时候退出循环,不在读取数据,否则read()阻塞。思路:用一次读1024字节衡量,最后一次没有读满或者刚好读满时候,表示流中没有数据了。
接收端代码片段:
InputStream is = socket.getInputStream();
int len = 0;
byte[] buf = new byte[1024];
StringBuffer sbf = new StringBuffer();
String temp = null;
int i = 0;
len = is.read(buf);
while(true){
temp = new String(buf,0,len);
sbf.append(temp);
if(len>=buf.length){
len = is.read(buf);
}else{
break ;
}
}
相关文档:
// 注册应用程序全局键盘事件, 所有的键盘事件都会被此事件监听器处理.
Toolkit tk = Toolkit.getDefaultToolkit();
tk.addAWTEventListener(new MyAWTEventListener(), AWTEvent.KEY_EVENT_MASK);
class MyAWTEventListener implements AWTEventListener {
private boolean controlPressed = fal ......
MD5算法是一种非常优秀的加密算法。
MD5加密算法特点:灵活性、不可恢复性。
介绍MD5加密算法基本情况MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。
Message-Digest泛指字节串(Message)的Has ......
有时,我们在写一个构造函数时,经常因为它包含众多的参数而苦恼,这时可以考虑用Builder模式来创建对象。
如,我们要设计一个营养成份的类,包含能量,蛋白质,脂肪,钙,铁,锌,维生素A, 维生素B1 ... 等,但在构造的时候,不一定每次都需要这些参数,如钙,铁,锌和维生素等是可选的,为了适应多种可能的搭配,比 ......
package testPackage;
class Test {
public static void main(String[] args) {
String hello = "Hello", lo = "lo";
System.out.print((hello == "Hello") + " ");
System.out.print((Other.hello == hello) + " ");
System.out.print((other.Other.hello == hello) + " ");
System.out.print((hello == ("Hel"+"lo ......
题目都很简单,但有时候让你用笔完整的写出来却不那么容易了.
1.遍历文件夹(被这个题目考了两次)
import java.io.File;
public class ListFile {
public static void main(String[] args) {
// TODO Auto-generated method stub
String path = "C:/Inetpub";
File f = new File(path);
list(f);
}
publ ......