字节流简述
字节简述
字节概述
字节(byte)是计算机用于计量存储容量的一中计量单位。B(字节)KB(千字节)
无论网络上两个终端需要传输什么数据,都需要传输二进制bit的数据。
既然传输的都是bit 为什么不把变量转化为bit类型。
原因是大部分的电脑的内存最小单位是8bit 所以无论传输什么类型的变量都要吧变量的数据转换为字节数据。
计算机能存储的唯一东西就是bytes(因为字节是电脑中表示信息的最小单位) 为了在计算机中存储东西我们首先将其编码为目标格式如MP3,MP4 若想网络传输需要转化为bytes
-
byte 字节 八位 (其中每四位可以用一个16进制数来表示)一个字节可以用两个十六进制的数进行表示。字节非常适合网络传输
b'\xe6\x88\x91\xe7\x88\xb1Python\xe7\xbc\x96\xe7\xa8\x8b' 其中 \x 表示十六进制,e 6 就是两个十六进制数
-
bit 代表一位 非1即0
字节串 字符串 字符集
- bytes 由多个字节组成,操作单位为字节(八位)类似字节容器。
- 字符串 str
- Unicode 字符集,包括汉字,为两个字节。实际使用的utf-8,utf-16 都属于 Unicode 字符集。
转换
-
字符串转换为字节串(按照指定的字符集进行编码即可)
b5="你好,世界".encode('utf-8') print(b5) b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c.'
-
字节串转字符串
str= b5.decode("utf-8")
如何把numpy.arry 转换成字节用于封包传输。
- 通常需要先进行存储图片,在读取并封包发送
import cv2
img_path = "/home/hqt/Desktop/DeepinScreenshot_select-area_20221126233252.png"
# 打开图片文件获取二进制数据 rb 表示二进制按字节解释。
with open(img_path,"rb") as f:
#读取图片的二进制数据
bin_contents = f.read()
result = requests.post('http://192.168.110.71:8080/', params={'threshold': 0.1},
data=bin_contents).json()
-
直接在内存中转成字节封包处理。
image=cv2.imread(img_path) success,encode_image=cv2.imencode(".jpg",image)#### 很重要 需要先进行编码 img=encode_image.tobytes()### 可以直接发型 with open("/home/hqt/Desktop/kk.jpg",'wb') as f:###客户端接收直接存储。 f.write(img) print(img[:20])
-
重点
1 图片转字节(需要先进行按照需要的格式进行编码并转成字节串)
img = cv2.imread(img_path) imgbytes = cv2.imencode(".jpg", img)[1].tobytes()
2 字节转图片(read (rb))后转numpy.array
#第一种方法先读取图片为字节,再转图片array
with open(img_file, "rb") as f:
img_data = f.read()
img = cv2.imdecode(np.fromstring(img_data, dtype=np.uint8), 1)
#第二种方法。采用numpy的fromfile
img_path = r"test.jpg"
img = cv2.imdecode(np.fromfile(img_path, dtype=np.uint8), 1)