我的教科书中有以下示例:
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包中的Channels
类。
我想知道如何使用这个类获得性能?如果我只使用System.out.println
?
使用ByteBuffer
类比使用Streams还是只选择?使用flip()
和rewind()
可能会很方便,但如果我只想说write()
没有缓冲区的套接字,我仍然可以这样做吗?我之所以感到困惑是因为我读过NIO是面向缓冲的而不是面向流的。