JavaSE 09
1. IO流相关
IO流:JVM和外界交换数据的通道
-
复制操作的原理:硬盘(源文件)->JVM->硬盘(目的文件)。此操作的实现需要两个流,一个输入流,一个输出流
-
节点流和处理流:节点流功能单一,处理流需要节点流作为参数创建(装饰着模式)。处理流有:缓冲流、转换流、数据流、对象流等。日常开发中用到最多的就是处理流。
-
一般不涉及String的流写入到文件中,都是乱码的(人类无法识别,机器可以)。
2. 网络编程相关
在java中的网络编程:只需要理解成JVM从物理网卡中获取数据即可,网卡怎么来的数据无需关心
java通过网络完成一次请求的代码示例:
// 服务器端
public class ServerTest {
public static void main(String[] args) throws Exception {
//监听端口
ServerSocket serverSocket = new ServerSocket(8888);
Socket socket = serverSocket.accept();//阻塞,直到三次握手成功
System.out.println("连接成功");
//获取输入流
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//从输入流读取数据
String s = br.readLine();
System.out.println("收到来自客户端的消息" + s);
//关闭输入流
socket.shutdownInput();
//获取输出流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
//写入应答信息到输出流
bw.write("我收到你的消息:" + s + "但是我不喜欢你,别给我发消息了");
bw.flush();
//关闭socket和输出流(四次挥手)
bw.close();
}
}
// 客户端
public class ClientTest {
public static void main(String[] args) throws Exception {
//创建连接对象(三次握手)
Socket socket = new Socket("127.0.0.1", 8888);
//获取输出流
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
//向流写入想发送的内容
Scanner scanner = new Scanner(System.in);
System.out.print("输入你想发送的消息:");
String s1 = scanner.nextLine();
System.out.println("发送消息:\n " + s1);
bw.write(s1);
bw.flush();
//关闭输出流
socket.shutdownOutput();
//获取输入流
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//读取服务器返回的数据
String s = br.readLine();
System.out.println("对方回复:\n" + s);
//关闭socket和流,关闭socket的意思就是四次挥手,若不进行四次挥手,服务器端会报错Connection reset
br.close();
}
}
-
java中的网络编程就是:和网卡中的数据进行交互。而交互则需要流,通过Socket的输入输出字节流可以实现接受和发送的操作。
-
一个Socket只能用来实现一次请求(一个来回)
-
Socket是基于TCP协议的,有三次握手和四次挥手操作