Java 使用;渠道;及;“缓冲区”;在尼奥
我的课本中有以下示例:Java 使用;渠道;及;“缓冲区”;在尼奥,java,sockets,buffer,nio,Java,Sockets,Buffer,Nio,我的课本中有以下示例: 1 import java.nio.*; 2 import java.nio.channels.*; 3 import java.net.*; 4 import java.io.IOException; 5 6 public class ChargenClient { 7 8 public static int DEFAULT_PORT = 19; 9 10 public static void main(String[] args) {
1 import java.nio.*;
2 import java.nio.channels.*;
3 import java.net.*;
4 import java.io.IOException;
5
6 public class ChargenClient {
7
8 public static int DEFAULT_PORT = 19;
9
10 public static void main(String[] args) {
11
12 if (args.length == 0) {
13 System.out.println("Usage: java ChargenClient host [port]");
14 return;
15 }
16
17 int port;
18 try {
19 port = Integer.parseInt(args[1]);
20 } catch (RuntimeException ex) {
21 port = DEFAULT_PORT;
22 }
23
24 try {
25 SocketAddress address = new InetSocketAddress(args[0], port);
26 SocketChannel client = SocketChannel.open(address);
27
28 ByteBuffer buffer = ByteBuffer.allocate(74);
29 WritableByteChannel out = Channels.newChannel(System.out);
30
31 while (client.read(buffer) != -1) {
32 buffer.flip();
33 out.write(buffer);
34 buffer.clear();
35 }
36 } catch (IOException ex) {
37 ex.printStackTrace();
38 }
39 }
40 }
它利用了第29行NIO Java包中的通道
类
System.out.println
,它会变慢吗ByteBuffer
类比使用流快还是只是可选的?使用flip()
和revind()
可能会很方便,但是如果我想说只write()
到套接字而不使用缓冲区,我仍然可以这样做吗?我之所以感到困惑,是因为我读过NIO是面向缓冲区的,而不是面向流的1.这段代码如下所示<代码>系统.out.println()写入。比较他们的速度毫无意义。2.这是可选的。@EJP:为什么NIO不像IO套接字那样提供getOutputStream之类的流方法,而是只对缓冲区进行读写?因为正如您自己所说,通道不是面向流的,而且流API对通道没有用处:例如,
write()
不返回计数,这在非阻塞模式中是必需的。