当前位置: 首页 > news >正文

UDP学习笔记(一)为什么UDP需要先将数据转换为字节数组

UDP 发送数据时需要先将数据转换为字节数组再发送,主要是因为计算机网络传输的最基本单位是“字节”(Byte)。让我们从以下几个方面来深入理解这个设计选择:


1. 计算机网络只能传输“字节”

在网络通信中,无论是 TCP 还是 UDP,最终传输的都是二进制数据。计算机不能直接传输字符串、整数或对象,而是需要转换为字节数组

📌 示例:发送字符串 "Hello"

val data = "Hello".toByteArray() // 转换为字节数组
  • 计算机存储 "Hello" 不是存字符串,而是存储对应的 ASCII/UTF-8 字节
    H -> 72 (0x48)
    e -> 101 (0x65)
    l -> 108 (0x6C)
    l -> 108 (0x6C)
    o -> 111 (0x6F)
    
  • toByteArray() 生成的字节数组:
    [72, 101, 108, 108, 111]
    
  • 这些字节才是真正可以通过 UDP 发送的数据

2. UDP 只是负责“搬运”字节数据

UDP 协议本质上是一个简单的“快递员”,它的任务是:

  1. 接收 一串二进制数据(字节数组)。
  2. 打包 数据,加上 IP 头、UDP 头(源端口、目标端口、数据长度等)。
  3. 发送 到网络。

UDP 不关心数据的类型,它只知道:

  • 这是一串二进制数据(字节数组)。
  • 需要发送到某个 IP 和端口。

这就像:

  • 快递员不管你寄的是书、本子还是手机,他们只在乎包装好的箱子(字节数组)。
  • UDP 也不管数据是不是字符串、图片或视频,它只是传输“字节”。

3. 统一格式,适用于所有数据类型

因为所有数据最终都能转换成字节数组,所以 UDP 传输时不需要关心数据格式。例如:

  • 字符串:转换为字节数组 toByteArray()
  • 整数:转换为字节数组 ByteBuffer.allocate(4).putInt(value).array()
  • 图片:JPEG/PNG 本质上也是字节数组
  • 音视频流:H.264/MP3 等数据流都是字节数组

不管是什么数据,只要能变成字节数组,UDP 就能传输

📌 示例:发送整数 1234

val buffer = ByteBuffer.allocate(4).putInt(1234).array()
  • 结果是:
    [0, 0, 4, 210] // 这是 1234 的二进制表示
    
  • 这个字节数组就可以通过 UDP 发送了。

4. 其他协议(如 TCP)也是传输字节

不仅是 UDP,所有网络协议最终传输的都是字节

  • HTTP 发送网页数据:HTML 文件也是字节数据。
  • FTP 传输文件:文件本质上也是字节流。
  • WebSocket 传输消息:消息数据同样要转换为字节数组。

无论是字符串、图片、视频、音频,在网络上传输时都必须转换为字节流,这样才能统一处理。


5. 提高数据传输的灵活性

如果 UDP 允许直接发送 字符串、整数、对象,那么:

  • 每种数据类型的发送方式都不同,协议设计会变得复杂。
  • 不同设备可能理解不了数据,比如一个 Java 设备发送 int,一个 Python 设备接收,它就可能无法解析。

字节数组是最通用的格式,不同设备(Windows、Linux、Android、iOS)都能理解字节数据,这样 UDP 就可以跨平台工作。


总结

  1. 计算机只能传输字节数据,所以 UDP 只能发送 字节数组
  2. UDP 只是一个“快递员”,它不关心数据类型,只搬运二进制数据。
  3. 所有数据都能转换为字节数组,所以 UDP 只需要支持 发送字节,而不用关心具体的数据类型。
  4. 网络上所有协议(HTTP、FTP、TCP、UDP)最终传输的都是字节数据,这样能兼容不同操作系统和设备。
  5. 这种设计让 UDP 更加通用和高效,无论是发送文本、图片还是音视频,都可以用 相同的方式 传输。

相关文章:

  • python-leetcode-统计构造好字符串的方案数
  • 蓝桥杯-15届研究生组-A 劲舞团
  • IDEA2023 使用枚举类型java: 非法字符: ‘\ufffd‘
  • 超链接打开新页签传递参数
  • 【目标检测】Efficient Feature Fusion for UAV Object Detection
  • AI编程: 一个案例对比CPU和GPU在深度学习方面的性能差异
  • 双指针7:LCR 007. 三数之和
  • C++智能指针weak_ptr
  • 从0开始的操作系统手搓教程24——完成我们的键盘驱动子系统
  • Ubuntu的软件源
  • 23种设计模式简介
  • 深入理解sync pool
  • 《深入浅出数据索引》- 大参林信息中心内部培训课程笔记
  • CefSharp 文件下载和保存功能-监听前端事件
  • Unity光照之Halo组件
  • 基于Spark的热门动漫推荐数据分析与可视化系统的设计与实现(采用Python语言Django框架,Hadoop,spider爬虫等技术实现)
  • 基于SpringBoot的智慧停车场小程序(源码+论文+部署教程)
  • 【科一】综合素质
  • 【轻松学C:编程小白的大冒险】---常量的定义、声明与应用场景 07
  • 13.数据结构(软考)
  • 晋江网站设计泉州名扬专业/软广告经典例子
  • 重庆品牌网站建设/seo网站关键词优化多少钱
  • 怎么看网站后台什么语言做的/武汉seo首页优化技巧
  • 浙江省建设工程质量协会网站/腾讯云建站
  • 网站源码下载地址是什么/外贸推广引流
  • 赣州市微程网络科技有限公司/北京网站营销seo方案