InputStream和OutputStream
-
輸入流(InputStream):
InputStream
是抽象類,用于從各種數據源(如文件、網絡連接、內存等)讀取字節流。- 常見的子類包括
FileInputStream
、ByteArrayInputStream
和SocketInputStream
等。
-
輸出流(OutputStream):
OutputStream
是抽象類,用于向各種目的地(如文件、網絡連接、內存等)寫入字節流。- 常見的子類包括
FileOutputStream
、ByteArrayOutputStream
和SocketOutputStream
等。
例子:使用Socket進行消息的發送和接收
1. 服務器端:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class Server {public static void main(String[] args) {try {ServerSocket serverSocket = new ServerSocket(8080);System.out.println("Server listening on port 8080...");// 等待客戶端連接Socket socket = serverSocket.accept();// 獲取輸入流InputStream inputStream = socket.getInputStream();// 讀取客戶端發送的消息byte[] buffer = new byte[1024];int bytesRead = inputStream.read(buffer);String message = new String(buffer, 0, bytesRead);System.out.println("Received message from client: " + message);// 獲取輸出流OutputStream outputStream = socket.getOutputStream();// 發送響應消息給客戶端String response = "Hello, Client!";outputStream.write(response.getBytes());// 關閉連接socket.close();serverSocket.close();} catch (IOException e) {e.printStackTrace();}}
}
2. 客戶端:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;public class Client {public static void main(String[] args) {try {// 連接到服務器Socket socket = new Socket("localhost", 8080);// 獲取輸出流OutputStream outputStream = socket.getOutputStream();// 發送消息給服務器String message = "Hello, Server!";outputStream.write(message.getBytes());// 獲取輸入流InputStream inputStream = socket.getInputStream();// 讀取服務器的響應消息byte[] buffer = new byte[1024];int bytesRead = inputStream.read(buffer);String response = new String(buffer, 0, bytesRead);System.out.println("Received response from server: " + response);// 關閉連接socket.close();} catch (IOException e) {e.printStackTrace();}}
}
服務器端通過ServerSocket
監聽端口,接受客戶端連接,然后通過輸入流接收客戶端發送的消息,通過輸出流發送響應消息。客戶端通過Socket
連接到服務器,通過輸出流發送消息,通過輸入流接收服務器的響應消息。