binary.write 和 binary.read

golang中encoding/binary包

1、golang包中的binary包是什么?
2、binary为我们开发者提供了哪些内容?以及怎么使用?
3、编解码有哪几种方法?

转化成二进制格式与原本数据转字符串相比会更节省空间

一、golang包中的binary包是什么?
此包实现了对数据与byte之间的转换,以及varint的编解码。

二、binary为我们开发者提供了哪些内容?以及怎么使用?
数据的byte序列化转换

func Read(r io.Reader, order ByteOrder, data interface{}) error
func Write(w io.Writer, order ByteOrder, data interface{}) error
func Size(v interface{}) int

uvarint和varint的编解码

func PutUvalint(buf []byte, x uint64) int
func PutVarint(buf []byte, x int64) int
func Uvarint(buf []byte) (uint64, int)
func Varint(buf []byte) (int64, int)
func ReadUvarint(r io.ByteReader) (uint64, error)
func ReadVarint(r io.ByteReader) (int64, error)

结构体

type ByteOrder:可以定义自己的字节序结构,用于序列化和反序列化数据。

1)func Read(r io.Reader, order ByteOrder, data interface{}) error

参数列表:
1)r  可以读出字节流的数据源
2)order  特殊字节序,包中提供大端字节序和小端字节序
3)data  需要解码成的数据
返回值:error  返回错误
功能说明:Read从r中读出字节数据并反序列化成结构数据。data必须是固定长的数据值或固定长数据的slice。从r中读出的数据可以使用特殊的 字节序来解码,并顺序写入value的字段。当填充结构体时,使用(_)名的字段讲被跳过。

代码案例

package mainimport ("fmt""log""bytes""encoding/binary"
)func main() {var pi float64b := []byte{0x18,0x2d,0x44,0x54,0xfb,0x21,0x09,0x40}buf := bytes.NewBuffer(b)err := binary.Read(buf, binary.LittleEndian, &pi)if err != nil {log.Fatalln("binary.Read failed:", err)}fmt.Println(pi)
}

2)Write(w io.Writer, order ByteOrder, data interface{}) error

参数列表:
1)w  可写入字节流的数据
2)order  特殊字节序,包中提供大端字节序和小端字节序
3)data  需要解码的数据
返回值:error  返回错误
功能说明:
Write讲data序列化成字节流写入w中。data必须是固定长度的数据值或固定长数据的slice,或指向此类数据的指针。写入w的字节流可用特殊的字节序来编码。另外,结构体中的(_)名的字段讲忽略。

代码案例:

package mainimport ("bytes""math""encoding/binary""log""fmt"
)func main() {buf := new(bytes.Buffer)pi := math.Pierr := binary.Write(buf, binary.LittleEndian, pi)if err != nil {log.Fatalln(err)}fmt.Println(buf.Bytes())
}

3)func Size(v interface{}) int

参数列表:v  需要计算长度的数据
返回值:int 数据序列化之后的字节长度
功能说明:
Size讲返回数据系列化之后的字节长度,数据必须是固定长数据类型、slice和结构体及其指针。

代码实例

package mainimport ("fmt""encoding/binary"
)func main() {var a intp := &ab := [10]int64{1}s := "adsa"bs := make([]byte, 10)fmt.Println(binary.Size(a)) // -1fmt.Println(binary.Size(p)) // -1fmt.Println(binary.Size(b)) // 80fmt.Println(binary.Size(s)) // -1fmt.Println(binary.Size(bs))    // 10
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/762655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用DevOpsGPT 5分钟开发一个网页小游戏

前言: 今天教大家如何制作一个简易的网页小游戏,步骤很简单,我们只需要用到一个智能开发软件,即可自动帮助我们完成开发。话不多说,接下来,我们直接上教程! ​ 官网:KUAFUAI - AI 驱…

ESP32通过USB/UART/ble/其他协议OTA报错解决

1、乐鑫官方例程 ESP32的OTA 例程是基于HTTP接口,需要连接WIFI和HTTP服务器,使用上不是很灵活,根据ESP32 idf component OTA相关API接口,理论上可以通过任何通信方式和协议进行升级,只要保证文件传输准确、flash空间足…

基于Matlab的视频人体动作识别,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…

智过网:一级建造师必须两年考过吗?有效期多久?

在建筑行业,一级建造师的职业资格证书是众多从业者追求的目标。然而,获得这一证书并非易事,它要求考生不仅具备扎实的专业知识,还需要在限定的时间内完成所有科目的考试。那么,一级建造师是否必须在两年内考完所有科目…

Guided Filter算法详解

论文地址 代码实现 def Guidedfilter(im,p,r,eps):mean_I cv2.boxFilter(im,cv2.CV_64F,(r,r));mean_p cv2.boxFilter(p, cv2.CV_64F,(r,r));mean_Ip cv2.boxFilter(im*p,cv2.CV_64F,(r,r));cov_Ip mean_Ip - mean_I*mean_p;# cov(x, y) E[XY] - E[X]E[Y]mean_II cv2.…

MySQL系统参数配置实战:生产环境优化

引言: MySQL作为广泛应用的关系型数据库,其系统参数配置直接影响着数据库的性能、稳定性以及资源利用率。本文旨在深入探讨MySQL的核心系统参数,并提供一份面向生产环境的配置建议,以帮助运维人员更好地优化数据库性能&#xff0…

harmonyos:Socket连接

场景介绍 应用通过Socket进行数据传输,支持TCP和UDP两种协议。 接口说明 Socket连接主要由socket模块提供。具体接口说明如下表。 接口名 功能描述 constructUDPSocketInstance() 创建一个UDPSocket对象。 constructTCPSocketInstance() 创建一个TCPSocket对…

鸿蒙Harmony应用开发—ArkTS-全局UI方法(文本滑动选择器弹窗)

根据指定的选择范围创建文本选择器,展示在弹窗上。 说明: 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 本模块功能依赖UI的执行上下文,不可在UI上下文不明确的地方使用&#xf…

ArkTS编写的HarmonyOS原生聊天UI框架

简介 ChatUI,是一个ArkTS编写的HarmonyOS原生聊天UI框架,提供了开箱即用的聊天对话组件。 下载安装 ohpm install changwei/chatuiOpenHarmony ohpm 环境配置等更多内容,请参考如何安装 OpenHarmony ohpm 包 接口和属性列表 接口列表 接…

day15-maven高级

1. 分模块设计与开发 步骤 创建 maven 模块 tlias-pojo&#xff0c;存放实体类。创建 maven 模块 tlias-utils&#xff0c;存放相关工具类。 <dependency><groupId>com.itheima</groupId><artifactId>tlias-pojo</artifactId><version>1.0…

线性表:关于链表(主要以单链表为例)的相关理解和应用

多清澈这天空 晴雨相拥 同心逐梦&#xff01; 坚守我信心 一路出众&#xff01;&#xff01; 首先&#xff0c;按照惯例&#xff0c;欢迎大家边听歌边观看本博客 ▶ 紫荆花盛开 (163.com)&#xff08;建议复制链接&#xff0c;浏览器打开&#xff0c;csdn打开太慢了&#x…

Error Lens插件

最近在看视频学习的时候&#xff0c;发现了一个我认为很好用的插件。 就是Error Lens&#xff0c;这个插件它能够以高亮、内联显示代码中的错误、警告和其他诊断信息&#xff0c;让开发者无需查看控制台或问题面板&#xff0c;就能在编辑代码的过程中直观地看到并快速定位到代码…

Java-Java基础学习(4)-多线程(2)

3.7. Lambda表达式 为什么要使用lambda表达式 避免匿名内部类定义过多&#xff1b;可以让代码看起来更简洁&#xff1b;去掉一堆没有意义的代码&#xff0c;只留下核心逻辑 属于函数式编程的概念&#xff0c;格式 (params) -> expression [表达式](params) -> statement…

【MySQL】存储过程、存储函数、触发器

目录 存储过程介绍技术背景存储过程的作用与优势存储过程跟自定义函数很像。它们的区别是&#xff1a; 存储过程的缺点存储过程的特性基本存储过程使用1.创建语法语法说明&#xff1a;使用案例1.创建获取新闻类别数量的存储过程2.创建获取指定新闻类别ID下新闻数量的存储过程 2…

全局loding控制

起因&#xff1a; 前几天遇到个面试题&#xff0c;如何检测&#xff0c;数据加载完毕以后进行数据的监听&#xff0c;我的回答是promise.all() promise.all() 当发现执行错误时候确实会进行立即返回没有办法进行全局的监听&#xff0c;但是在传入的参数里面如果进行报错的抓取…

【代码随想录算法训练营第三十一天 | LeetCode455.分发饼干、376. 摆动序列、 53. 最大子序和】

代码随想录算法训练营第三十一天 | LeetCode455.分发饼干、376. 摆动序列、 53. 最大子序和 一、455.分发饼干 解题代码C&#xff1a; class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(), g.end());sor…

2022年第13届蓝桥杯Java省赛B组-星期计算

一、题目 星期计算 【问题描述】 已知今天是星期六&#xff0c;请问 天后是星期几&#xff1f;注意用数字 1 到 7 表示星期一到星期日。 【答案提交】 这是一道结果填空的题&#xff0c;你只需要算出结果后提交即可。本题的结果为一个整数&#xff0c;在提交答案时只填写这个…

学习人工智能:Attention Is All You Need-1-介绍;Transformer模型架构;编码器,解码器

Transformer模型是目前最成功的chatGPT&#xff0c;Sora&#xff0c;文心一言&#xff0c;LLama&#xff0c;Grok的基础模型。 《Attention Is All You Need》是一篇由Google DeepMind团队在2017年发表的论文&#xff0c;该论文提出了一种新的神经网络模型&#xff0c;即Trans…

科大讯飞开放平台-python语音转文字教程

文章目录 简介实际使用代码coding简介 科大讯飞的语音转写(Long Form ASR)——基于深度全序列卷积神经网络,将长段音频(5小时以内)数据转换成文本数据,为信息处理和数据挖掘提供基础。 转写的是已录制音频(非实时),音频文件上传成功后进入等待队列,待转写成功后用户…

极兔速递邀您参观2024长三角快递物流供应链与技术装备展览会

2024长三角快递物流供应链与技术装备展览会&#xff08;杭州&#xff09; 2024年7月8-10日 | 杭州国际博览中心 参展企业介绍 J&T极兔速递是一家全球综合物流服务运营商&#xff0c;快递业务在全球规模最大及增长最快的东南亚和中国市场处于领先地位。公司创立于2015年&a…