(二)JAVA NIO CHANNEL
FileChannel 从文件中读写数据。
FileChannelTest.java
public class FileChannelTest {
public static void main(String[] args) throws IOException {
FileChannel inputFileChannel = new FileInputStream("file.text absolute path").getChannel();
ByteBuffer readBuffer = ByteBuffer.allocate(100);
inputFileChannel.read(readBuffer);
readBuffer.flip();
for (int i = 0; i < readBuffer.limit(); i++) {
System.out.println((char) readBuffer.get());
}
FileChannel outputFileChannel = new FileOutputStream("file.text absolute path", true).getChannel();
ByteBuffer writeBuffer = ByteBuffer.wrap("TOM".getBytes());
outputFileChannel.write(writeBuffer);
inputFileChannel.close();
outputFileChannel.close();
}
}
DatagramChannel 能通过UDP读写网络中的数据。
DatagramChannelServer.java
public class DatagramChannelServer {
public static void main(String[] args) throws IOException {
DatagramChannel channel = DatagramChannel.open();
channel.socket().bind(new InetSocketAddress(9999));
ByteBuffer buf = ByteBuffer.allocate(48);
while (true) {
channel.receive(buf);
buf.flip();
for (int i = 0; i < buf.limit(); i++) {
System.out.println((char) buf.get());
}
buf.clear();
}
}
}
DatagramChannelClient.java
public class DatagramChannelClient {
public static void main(String[] args) throws IOException {
DatagramChannel channel = DatagramChannel.open();
ByteBuffer buf = ByteBuffer.allocate(48);
buf = buf.wrap("AA".getBytes());
channel.send(buf, new InetSocketAddress("localhost", 9999));
}
}
ServerSocketChannel 可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel。
SocketChannel 能通过TCP读写网络中的数据。
NioChannelServer.java
public class NioChannelServer {
public static void main(String[] args) throws IOException {
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.socket().bind(new InetSocketAddress(9999));
ByteBuffer buf = ByteBuffer.allocate(48);
while (true) {
SocketChannel channel = serverSocketChannel.accept();
while (true) {
channel.read(buf);
buf.flip();
for (int i = 0; i < buf.limit(); i++) {
System.out.println((char) buf.get());
}
buf.clear();
}
}
}
}
NioChannelClient.java
public class NioChannelClient {
public static void main(String[] args) throws IOException {
SocketChannel socketChannel = SocketChannel.open();
socketChannel.connect(new InetSocketAddress("localhost", 9999));
while (true) {
Scanner input = new Scanner(System.in);
socketChannel.write(ByteBuffer.wrap(input.nextLine().getBytes()));
}
}
}