1、socket 可以理解为传输层的一个编程规范
![](https://i-blog.csdnimg.cn/blog_migrate/b3b12a6295402b47dcdf9104d32dfac6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8daa20e93d16922514c4a978d72b65f4.png)
2、bio 以stream的方式
![](https://i-blog.csdnimg.cn/blog_migrate/fcad61fc420868f10d3a38b0aaff3c4f.png)
nio 以channel的方式
![](https://i-blog.csdnimg.cn/blog_migrate/fbdce7d316f6eced26bb7f80b405597f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6e7a09f881c7ff1fd925cd05347bec95.png)
nio向本地文件中写数据
@Test //往本地文件中写数据
public void test1() throws Exception{
//1. 创建输出流
FileOutputStream fos=new FileOutputStream("basic.txt");
//2. 从流中得到一个通道
FileChannel fc=fos.getChannel();
//3. 提供一个缓冲区
ByteBuffer buffer=ByteBuffer.allocate(1024);
//4. 往缓冲区中存入数据
String str="hello,nio";
buffer.put(str.getBytes());
//5. 翻转缓冲区
buffer.flip();
//6. 把缓冲区写到通道中
fc.write(buffer);
//7. 关闭
fos.close();
}
从本地文件读取数据
@Test //从本地文件中读取数据
public void test2() throws Exception{
File file=new File("basic.txt");
//1. 创建输入流
FileInputStream fis=new FileInputStream(file);
//2. 得到一个通道
FileChannel fc=fis.getChannel();
//3. 准备一个缓冲区
ByteBuffer buffer=ByteBuffer.allocate((int)file.length());
//4. 从通道里读取数据并存到缓冲区中
fc.read(buffer);
System.out.println(new String(buffer.array()));
//5. 关闭
fis.close();
}
nio网络连接demo
java bio nio netty