博客
关于我
流中写入文字和图片
阅读量: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、HBase 和 Elasticsearch:特点与区别详解
查看>>
MySQL、Redis高频面试题汇总
查看>>
MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
查看>>
mysql一个字段为空时使用另一个字段排序
查看>>
MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
查看>>
MYSQL一直显示正在启动
查看>>
MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
查看>>
MySQL万字总结!超详细!
查看>>
Mysql下载以及安装(新手入门,超详细)
查看>>
MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
查看>>
MySQL不同字符集及排序规则详解:业务场景下的最佳选
查看>>
Mysql不同官方版本对比
查看>>
MySQL与Informix数据库中的同义表创建:深入解析与比较
查看>>
mysql与mem_细说 MySQL 之 MEM_ROOT
查看>>
MySQL与Oracle的数据迁移注意事项,另附转换工具链接
查看>>
mysql丢失更新问题
查看>>
MySQL两千万数据优化&迁移
查看>>
MySql中 delimiter 详解
查看>>
MYSQL中 find_in_set() 函数用法详解
查看>>
MySQL中auto_increment有什么作用?(IT枫斗者)
查看>>