本文共 5371 字,大约阅读时间需要 17 分钟。
In this section, we will explore the efficient way to send and receive strings between client and server using Java networking.
Each character in the string is encoded into a 2-byte array. This ensures that both English and Chinese characters are handled correctly. Here’s how the conversion works:
public static byte[] char2byte(char c) { byte[] bytes = new byte[2]; bytes[0] = (byte)((c & 0xff)); // Low eight bits bytes[1] = (byte)((c >> 8) & 0xff); // High eight bits return bytes;}
This method converts each character to a byte array, facilitating easy transmission.
###Efficient String Transmission
For transmission, send the length first and then the byte array:
public class Client { public static void main(String[] args) { try { Socket socket = new Socket("127.0.0.1", 9090); OutputStream out = socket.getOutputStream(); InputStream input = socket.getInputStream(); String s = "Greetings!"; out.write(s.length()); byte[] bytes = s.getBytes(); out.write(bytes); out.flush(); } catch (IOException e) { e.printStackTrace(); } }}
The server reads the length and reconstructs the string:
public class Server { public static void main(String[] args) { try { ServerSocket serSocket = new ServerSocket(9090); Socket ser = serSocket.accept(); System.out.println("Connection successful"); InputStream input = ser.getInputStream(); int len = input.read(); byte[] bytes = new byte[len); input.read(bytes); String received = new String(bytes); System.out.println("Received: " + received); } catch (IOException e) { e.printStackTrace(); } }}
This approach ensures that each character is converted and transmitted independently, avoiding byte array complexity.
Java provides simple methods to handle string conversion, making the implementation straightforward:
public class Client { public static void main(String[] args) { try { Socket socket = new Socket("127.0.0.1", 9090); OutputStream out = socket.getOutputStream(); InputStream input = socket.getInputStream(); String s = "HelloWorld"; byte[] data = s.getBytes(); out.write(data.length); out.write(data); out.flush(); } catch (IOException e) { e.printStackTrace(); } }}
The server reconstructs the string using the byte array:
public class Server { public static void main(String[] args) { try { ServerSocket serSocket = new ServerSocket(9090); Socket ser = serSocket.accept(); System.out.println("Connected"); InputStream input = ser.getInputStream(); byte[] data = new byte[100]; int len = input.read(); input.read(data); String received = new String(data); System.out.println("Message received: " + received); } catch (IOException e) { e.printStackTrace(); } }}
This method leverages Java’s built-in functions for simplicity and reliability.
Efficient image transmission involves structuring the data for effective reading and processing.
Convert images into a compressed format, then serialize each pixel’s byte values for transmission:
public void sendImage(OutputStream out, BufferedImage image) { try { int[][] imgData = toArray(image); int imageWidth = imgData.length; int imageHeight = imgData[0].length; out.write(imageWidth); out.write(imageHeight); for (int i = 0; i < imageWidth; i++) { for (int j = 0; j < imageHeight; j++) { byte color = (byte) imgData[i][j]; out.write(color); } } } catch (IOException e) { e.printStackTrace(); }}
The receiver reconstructs the image using the received data:
public class Server { public static void main(String[] args) { try { ServerSocket serSocket = new ServerSocket(9090); Socket ser = serSocket.accept(); System.out.println("Image transfer initiated"); InputStream input = ser.getInputStream(); int width = input.read(); int height = input.read(); byte[] imgData = new byte[width * height]; int imgBytes = input.read(imgData); if (imgBytes != width * height) { throw new IOException("Incomplete image data"); } // Reconstruct image from imgData } catch (IOException e) { e.printStackTrace(); } }}
For smooth rendering, use double buffering to ensure the image is drawn without flicker, enhancing user experience.
These guides provide a robust framework for efficient string and image transmission in Java networking. Tailor the methods to specific requirements to achieve optimal performance and compatibility.
转载地址:http://jjekk.baihongyu.com/