iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >boost.asio框架系列之buffer函数怎么使用
  • 619
分享到

boost.asio框架系列之buffer函数怎么使用

2023-07-02 10:07:05 619人浏览 八月长安
摘要

本文小编为大家详细介绍“boost.asio框架系列之buffer函数怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“boost.asio框架系列之buffer函数怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来

本文小编为大家详细介绍“boost.asio框架系列之buffer函数怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“boost.asio框架系列之buffer函数怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

创建buffer

在io操作中,对数据的读写大都是在一个缓冲区上进行的,在asio框架中,可以通过asio::buffer函数创建一个缓冲区来提供数据的读写。buffer函数本身并不申请内存,只是提供了一个对现有内存的封装。

char d1[128];size_t bytes_transferred = sock.receive(asio::buffer(d1));

直接用字符串做buffer也是常见的形式:

string str = " hello world " ;size_t bytes_transferred = sock.send(asio::buffer(str));

除了这些基础类型外,也可以使用stl中的容器,非常方便。

asio::buffer(std::vector<char>(128));asio::buffer(std::array<char,128>());

将buffer还原为数据对象

前面的操作是通过把数据对象封装成buffer,在使用过程中往往也需要把buffer还原为数据对象。

char* p1 = asio::buffer_cast<char*>(buffer);

获取buffer大小

可以通过buffer_size函数获取buffer大小。

size_t s1 = asio::buffer_size(buf);

读写buffer

读写buffer一般都是和io对象相关联的,io对象成员函数中就提供了读写操作。以tcp::Socket对象为例,它提供了read_some和write_some来实现读写操作:

std::array<char, 128> buf;sock.read_some(asio::buffer(buf));

另外,asio名字空间下也提供了通用的read、write函数,通过它们可以实现更加高级的读写功能

size_t bytes_transfered = asio::read(sock, asio::buffer(buf), asio::transfer_all(), err);

这里我就使用了transfer_all标记强制读满buffer才返回,另外还有两个比较常用的标记transfer_at_least()和transfer_exactly(),非常方便。

streambuf

asio::streambuf则是提供了一个流类型的buffer,它自身是能申请内存的。它的好处是可以通过stl的stream相关函数实现缓冲区操作,处理起来更加方便。

    //通过streambuf发送数据    asio::streambuf b;    std::ostream os(&b);    os << "Hello, World!\n";    size_t n = sock.send(b.data());    // try sending some data in input sequence    b.consume(n); // sent data is removed from input sequence     //通过streambuf读数据    asio::streambuf b;    asio::streambuf::mutable_buffers_type bufs = b.prepare(512);    // reserve 512 bytes in output sequence    size_t n = sock.receive(bufs);    b.commit(n);    // received data is "committed" from output sequence to input sequence    std::istream is(&b);    std::string s;    is >> s;

另外,asio名字空间下还提供了一个的read_until函数,可以实现读到满足指定条件的字符串为止,对于解析协议来说非常有用。

size_t n = asio::read_until(sock, stream, '\n');asio::streambuf::const_buffers_type bufs = sb.data();std::string line(asio::buffers_begin(bufs), asio::buffers_begin(bufs) + n);

这个指定条件除了是字符串外,还可以是正则表达式,非常给力。这也是asio库为什么要依赖于boost.regex的原因。(虽然regex已经标准化了,但仍得使用boost.regex库。等什么时候asio也标准化后估计就可以直接使用std.regex库了)

自定义内存分配

异步IO操作时往往会申请动态内存,使用完后就释放掉;在IO密集型的场景中,频繁的申请释放内存对性能会有较大影响。为了避免这个问题,asio提供了一个内存池式的模型 asio_handler_allocate 和 asio_handler_deallocate 来复用内存。

读到这里,这篇“boost.asio框架系列之buffer函数怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: boost.asio框架系列之buffer函数怎么使用

本文链接: https://www.lsjlt.com/news/341402.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • boost.asio框架系列之buffer函数怎么使用
    本文小编为大家详细介绍“boost.asio框架系列之buffer函数怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“boost.asio框架系列之buffer函数怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来...
    99+
    2023-07-02
  • boost.asio框架系列之buffer函数
    创建buffer 在io操作中,对数据的读写大都是在一个缓冲区上进行的,在asio框架中,可以通过asio::buffer函数创建一个缓冲区来提供数据的读写。buffer函数本身并不...
    99+
    2024-04-02
  • boost.asio框架系列之socket编程
    asio的主要用途还是用于socket编程,本文就以一个tcp的daytimer服务为例简单的演示一下如何实现同步和异步的tcp socket编程。 客户端 客户端的代码如下: ...
    99+
    2024-04-02
  • boost.asio框架系列之定时器Timer怎么使用
    这篇文章主要介绍“boost.asio框架系列之定时器Timer怎么使用”,在日常操作中,相信很多人在boost.asio框架系列之定时器Timer怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”boo...
    99+
    2023-07-02
  • boost.asio框架系列之调度器io_service怎么使用
    本篇内容介绍了“boost.asio框架系列之调度器io_service怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!IO模型io_...
    99+
    2023-07-02
  • boost.asio框架系列之定时器Timer
    同步Timer asio中提供的timer名为deadline_timer,它提供了超时计时的功能。首先以一个最简单的同步Timer为例来演示如何使用它。 #include ...
    99+
    2024-04-02
  • boost.asio框架系列之socket编程怎么实现
    这篇“boost.asio框架系列之socket编程怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“boost.asi...
    99+
    2023-07-02
  • boost.asio框架系列之调度器io_service
    IO模型 io_service对象是asio框架中的调度器,所有异步io事件都是通过它来分发处理的(io对象的构造函数中都需要传入一个io_service对象)。 asio::io_...
    99+
    2024-04-02
  • python buffer函数怎么使用
    在Python中,buffer()函数用于创建一个缓冲区对象,它可以作为内存对象来处理二进制数据。buffer()函数的语法如下:b...
    99+
    2023-09-23
    python
  • Python之ORM框架怎么使用
    本文小编为大家详细介绍“Python之ORM框架怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python之ORM框架怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、Python语言中有哪些常...
    99+
    2023-07-02
  • Django框架之路由怎么使用
    这篇文章主要介绍“Django框架之路由怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Django框架之路由怎么使用”文章能帮助大家解决问题。简介路由简单的来说就是根据用户请求的 URL 链...
    99+
    2023-07-02
  • web基础之Structs框架怎么使用
    Structs是一个用于构建Web应用程序的开源Java框架。它提供了一些核心功能,如表单验证、国际化、数据绑定等,使开发人员能够更...
    99+
    2023-09-29
    Structs
  • Express框架app函数如何使用
    本篇内容主要讲解“Express框架app函数如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Express框架app函数如何使用”吧!express 函数来源首先要搞明白 express...
    99+
    2023-07-05
  • node.js之koa框架怎么用
    这篇文章将为大家详细讲解有关node.js之koa框架怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Koa -- 基于 Node.js 平台的下一代 web 开发框...
    99+
    2024-04-02
  • 如何在PHP中使用框架函数
    随着互联网技术的发展,PHP已经成为了一种非常流行的编程语言。不仅如此,PHP也拥有许多优秀的框架,如Laravel、Symfony、Yii2等。这些框架不仅能够让开发者更加高效地开发应用程序,还能提高程序的可维护性和可扩展性。在这篇文章中...
    99+
    2023-05-19
    框架 函数 PHP
  • 深度学习框架之MXNet怎么使用
    使用MXNet进行深度学习主要有以下几个步骤:1. 安装MXNet:可以通过pip命令进行安装,例如`pip install mxn...
    99+
    2023-09-21
    深度学习 MXNet
  • ASP 函数和 Spring 框架有什么联系?
    ASP 函数和 Spring 框架是两个完全不同的技术,但是它们都有着相似的目标,即提高应用程序的性能和可维护性。在本文中,我们将探讨 ASP 函数和 Spring 框架之间的联系,并介绍如何在应用程序中使用它们。 ASP 函数是一种在 A...
    99+
    2023-09-05
    函数 spring git
  • 【Spring框架全系列】方法注解@Bean的使用
    📬📬哈喽,大家好,我是小浪。上篇博客我们介绍了五大类注解的使用方法,以及如何解决Spring使用五大类注解生成bean-Name的问题;那么,谈到如何更简单的读取和存储对象,这里我们还需要介绍另外一个"方...
    99+
    2023-09-27
    java spring boot spring
  • JS框架之vue.js怎么应用
    这篇文章主要讲解了“JS框架之vue.js怎么应用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS框架之vue.js怎么应用”吧!1.举个栗子//model层:// 通过exte...
    99+
    2023-07-04
  • Express框架详解app函数使用实例
    目录express 函数来源express 的其他输出app 方法中混入原型app 中挂载请求/响应对象app 中的原型app 对象上挂载方法app 初始化小结express 函数来...
    99+
    2023-03-03
    Express框架app函数 Express app
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作