博客
关于我
流中写入文字和图片
阅读量:792 次
发布时间:2019-03-24

本文共 5371 字,大约阅读时间需要 17 分钟。

Java Networking Guide: String and Image Transmission Optimization

String Encoding and Transmission

In this section, we will explore the efficient way to send and receive strings between client and server using Java networking.

Understanding Encoding

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();        }    }}

Method One: Character-by-Character Conversion

This approach ensures that each character is converted and transmitted independently, avoiding byte array complexity.

Method Two: Utilizing Built-in Methods

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.

Image Transmission Guide

Efficient image transmission involves structuring the data for effective reading and processing.

Image Data Conversion

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();    }}

Reading Image Data

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();        }    }}

Image Transmission Tip: Use Double Buffering

For smooth rendering, use double buffering to ensure the image is drawn without flicker, enhancing user experience.

Summary

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/

你可能感兴趣的文章
mysql数据库中的数据如何加密呢?mysql8.0自带新特性
查看>>
MySQL数据库优化
查看>>
MySQL数据库优化总结
查看>>
MySQL数据库入门看这一篇文章就够了
查看>>
Mysql数据库函数contac_函数:函数删除操作语法&使用例——《mysql 从入门到内卷再到入土》...
查看>>
mysql数据库命令备份还原
查看>>
mysql数据库基础教程
查看>>
MySQL数据库备份
查看>>
mysql数据库备份与恢复
查看>>
MySQL数据库备份实战
查看>>
Mysql数据库备份的问题:mysqldump: Got error: 1049: Unknown_无需整理
查看>>
mysql数据库如何重置密码是多少钱_MySQL数据库忘记root密码如何重置修改
查看>>
MySQL数据库安装配置与常用命令
查看>>
MySQL数据库实现主从同步数据
查看>>
mysql数据库导入导出_windows系统以及linux系统下的操作---linux工作笔记042
查看>>
mysql数据库导出导入
查看>>
MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)
查看>>
mysql数据库常用命令
查看>>
MySQL数据库必会的增删查改操作(CRUD)
查看>>
MySQL数据库性能分析与调优实践
查看>>