1、字符缓存
* 字符缓存
*/
@Test
public void test8(){
// 分配缓存
CharBuffer charBuffer = CharBuffer.allocate(1024);
charBuffer.put("哈尔滨北京上海");
// 使恢复到起始位置可读取
charBuffer.flip();
// for (int i=0;i<charBuffer.limit();i++){
// System.out.print(charBuffer.get());
// }
// System.out.println(charBuffer.toString());
// char[] dst = new char[charBuffer.limit()];
// charBuffer.get(dst);
// System.out.print(new String(dst));
System.out.println(new String(charBuffer.array(),0,charBuffer.limit())); // 0-1024个字节全部转换为字符数组打印到控制台上
}
2、字符缓存的编码和解码
/**
* 编解码
*/
@Test
public void test9(){
// 分配缓存
CharBuffer buffer = CharBuffer.allocate(1024);
buffer.put("哈尔滨北京上海");
// 使恢复到起始位置可读取
buffer.flip();
//编码 字符转换为字节
Charset charset = Charset.forName("utf-8");
ByteBuffer byteBuffer = charset.encode(buffer);
// 混乱的字节码
// for(int i=0;i<byteBuffer.limit();i++){
//
// System.out.println((char) byteBuffer.get());
//
// }
// 解码
Charset charset1 = Charset.forName("utf-8");
CharBuffer charBuffer = charset1.decode(byteBuffer);
System.out.println(new String(charBuffer.array(),0,charBuffer.limit()));
}
3、网络通讯(阻塞式)代码实现
package edu.xalead;
import org.junit.Test;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
public class TestNet {
/**
* 客户端
*/
@Test
public void test1() throws Exception {
// Socket s = new Socket("127.0.0.1", 8888);
// SocketChannel socketChannel = s.getChannel();
SocketChannel socketChannel = SocketChannel.open(new InetSocketAddress("127.0.0.1", 8888));
FileChannel fileChannel = FileChannel.open(Paths.get("3.jpg"), StandardOpenOption.READ);
// 分配缓存
ByteBuffer buf = ByteBuffer.allocate(1024);
// 从文件读字节到缓存
while (fileChannel.read(buf)!=-1){
buf.flip();
socketChannel.write(buf);
buf.clear();
}
// 关闭通道
fileChannel.close();
socketChannel.close();
}
SocketChannel socketChannel = null;
/**
* 服务端
*/
@Test
public void test2() throws Exception {
// ServerSocket serverSocket = new ServerSocket(8888);
// ServerSocketChannel channel = serverSocket.getChannel();
// 创建通道
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
//绑定端口
serverSocketChannel.bind(new InetSocketAddress(8888));
while (true) {
//监听并获得通道
socketChannel = serverSocketChannel.accept();
new Thread() {
public void run() {
try {
FileChannel fileChannel = null;
//创建缓存
ByteBuffer buffer = ByteBuffer.allocate(1024);
//创建文件通道
fileChannel = FileChannel.open(Paths.get("7.jpg"), StandardOpenOption.WRITE, StandardOpenOption.CREATE_NEW);
//读网络数据到缓存
while (socketChannel.read(buffer) != -1) {
buffer.flip();
fileChannel.write(buffer);
buffer.clear();
}
fileChannel.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
}
//关闭
// serverSocketChannel.close();
}
具体实现,敲代码仔细斟酌。代码差不多都有注释,仅供参考!!!!