博客
关于我
流中写入文字和图片
阅读量: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中TINYINT的取值范围
查看>>
MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
查看>>
Mysql中varchar类型数字排序不对踩坑记录
查看>>
MySQL中一条SQL语句到底是如何执行的呢?
查看>>
MySQL中你必须知道的10件事,1.5万字!
查看>>
MySQL中使用IN()查询到底走不走索引?
查看>>
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>
MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
查看>>
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>
Mysql中各类锁的机制图文详细解析(全)
查看>>
MySQL中地理位置数据扩展geometry的使用心得
查看>>
Mysql中存储引擎简介、修改、查询、选择
查看>>
Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和处理程序的使用示例
查看>>
mysql中实现rownum,对结果进行排序
查看>>
mysql中对于数据库的基本操作
查看>>
Mysql中常用函数的使用示例
查看>>
MySql中怎样使用case-when实现判断查询结果返回
查看>>
Mysql中怎样使用update更新某列的数据减去指定值
查看>>