Java Socket 如何接收byte和String

2024-06-06 08:48
文章标签 java string socket 接收 byte

本文主要是介绍Java Socket 如何接收byte和String,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Java Socket 如何接收byte和String

一、发送byte[]与String

我们平时是怎么发送byte和String的呢?举例代码:

String str = "hello world"+ "\n";
byte[] bytes = 图片字节流;
// 获取socket输出流
OutputStream out = socket.getOutputStream();
// 发送字符串
out.write(str.getBytes());
// 发送byte数组
out.write(bytes);

发送代码部分很简单,即使是String也是转了byte发送的。那客户端在接收的时候如何做区分呢,客户端怎么知道接收的byte是要转字符串,还是转图片或其它类型呢?

那么就需要改进代码了,在发送端增加一个标识,客户端在接收到消息的时候,根据标识进行区分,这样接收端就知道消息该怎么转了。

修改之后的发送端代码举例:

// 定义两个标识
final int SOCKET_STRING = 1;
final int SOCKET_BYTE = 2;public void sendString() {String str = "hello world";// 获取socket输出流OutputStream out = socket.getOutputStream();// 增加字符串的标识out.write(BytesUtils.int2ByteArray(SOCKET_STRING));// 发送字符串out.write(str.getBytes());out.flush();}public void sendBytes() {byte[] bytes = 图片字节流;// 获取socket输出流OutputStream out = socket.getOutputStream();// 增加字符串的标识out.write(BytesUtils.int2ByteArray(SOCKET_BYTE));// 发送byte数组out.write(bytes);out.flush();}

二、区分接收byte[]与String

// 获取输入流
InputStream is = socket.getInputStream();
byte[] types = new byte[4];
is.read(types)
int type = BytesUtils.bytes2Int(srcType);if(type == 1){
// todo 接收数组转为String
}else{
// todo 接收数组转为图片
}

这里为什么会创建4个字节呢。原因是因为在java中,一个int占用4个字节,我们判断类型只需要将int取出来即可。在java中:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ONbRTFzf-1588685277648)(evernotecid://17BA373C-0ACF-4FD7-AE4C-68B9365102F8/appyinxiangcom/26996375/ENResource/p48)]

附上BytesUtils代码

public class BytesUtils {/*** int转byte[]* 该方法将一个int类型的数据转换为byte[]形式,因为int为32bit,而byte为8bit所以在进行类型转换时,知会获取低8位,* 丢弃高24位。通过位移的方式,将32bit的数据转换成4个8bit的数据。注意 &0xff,在这当中,&0xff简单理解为一把剪刀,* 将想要获取的8位数据截取出来。** @param i 一个int数字* @return byte[]*/public static byte[] int2ByteArray(int i) {byte[] result = new byte[4];result[0] = (byte) ((i >> 24) & 0xFF);result[1] = (byte) ((i >> 16) & 0xFF);result[2] = (byte) ((i >> 8) & 0xFF);result[3] = (byte) (i & 0xFF);return result;}/*** byte[]转int* 利用int2ByteArray方法,将一个int转为byte[],但在解析时,需要将数据还原。同样使用移位的方式,将适当的位数进行还原,* 0xFF为16进制的数据,所以在其后每加上一位,就相当于二进制加上4位。同时,使用|=号拼接数据,将其还原成最终的int数据** @param bytes byte类型数组* @return int数字*/public static int bytes2Int(byte[] bytes) {int num = bytes[3] & 0xFF;num |= ((bytes[2] << 8) & 0xFF00);num |= ((bytes[1] << 16) & 0xFF0000);num |= ((bytes[0] << 24) & 0xFF0000);return num;}
}

这篇关于Java Socket 如何接收byte和String的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1035634

相关文章

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

基于Java和FFmpeg实现视频压缩和剪辑功能

《基于Java和FFmpeg实现视频压缩和剪辑功能》在视频处理开发中,压缩和剪辑是常见的需求,本文将介绍如何使用Java结合FFmpeg实现视频压缩和剪辑功能,同时去除数据库操作,仅专注于视频处理,需... 目录引言1. 环境准备1.1 项目依赖1.2 安装 FFmpeg2. 视频压缩功能实现2.1 主要功

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

Spring-DI依赖注入全过程

《Spring-DI依赖注入全过程》SpringDI是核心特性,通过容器管理依赖注入,降低耦合度,实现方式包括组件扫描、构造器/设值/字段注入、自动装配及作用域配置,支持灵活的依赖管理与生命周期控制,... 目录1. 什么是Spring DI?2.Spring如何做的DI3.总结1. 什么是Spring D

spring AMQP代码生成rabbitmq的exchange and queue教程

《springAMQP代码生成rabbitmq的exchangeandqueue教程》使用SpringAMQP代码直接创建RabbitMQexchange和queue,并确保绑定关系自动成立,简... 目录spring AMQP代码生成rabbitmq的exchange and 编程queue执行结果总结s

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

Spring Boot 整合 SSE(Server-Sent Events)实战案例(全网最全)

《SpringBoot整合SSE(Server-SentEvents)实战案例(全网最全)》本文通过实战案例讲解SpringBoot整合SSE技术,涵盖实现原理、代码配置、异常处理及前端交互,... 目录Spring Boot 整合 SSE(Server-Sent Events)1、简述SSE与其他技术的对