该文章对编写客户服务器应用的java程序员有所帮助,可以解决程序在对方出现故障的时候继续稳定运行.
前言:java程序要处理很多的网络数据,网络数据发送和接收以及数据流的处理是java程序要特别关注的方面,随着java的发展,这些方法也越来越得到重视和加强。本文从几个方面解释了java正确处理网络数据流的要素,这些也是java程序员必须了解的基本的知识。
1:庞大的java流处理
首先,之所以说java流的庞大,是因为java中的流处理比其他语言的流处理在内容上多的多。
java流在处理上分为字符流和字节流。字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。
Java内用Unicode编码存储字符,字符流处理类负责将外部的其他编码的字符流和java内Unicode字符流之间的转换。而类InputStreamReader和OutputStreamWriter处理字符流和字节流的转换。字符流(一次可以处理一个缓冲区)一次操作比字节流(一次一个字节)效率高。
对应不同的流,需要不同的流构建器或流过滤实现。java目前依然在逐渐增加其流处理方法,虽然java类库的创作人员可以列举出很多理由来说明这要做的优点,但我还是觉得java开始变得向其他语言一样复杂起来。
2:网络数据流的收发
java对网络数据的发送和接收处理,也借用了一般流处理的方法。我们知道,在几乎其他所有语言中,网络数据的收发在利用类似send(或write)和recv(或read)的方法时并没有明显的流处理。但是java和这些语言的收发方法有较大区别,要借助流才可以完成:
width="100%">
.......
sock = new Socket(addr, port);
OutputStream os = sock.getOutputStream();
InputStream is = sock.getInputStream();
os.write(byte[] b);
is.read(byte[] b);
width="100%">
......
ByteBuffer bytebuf = ByteBuffer.allocate(2048); // 创建一个指定大小的缓冲区