2016-08-25 ruki
stream是tbox的最常用的流,一般用于单路io操作,既可以进行阻塞读写,也可以非阻塞的读写。 目前可以支持 数据、文件、套接字、http协议以及各种过滤器的读写操作,也可以很方便的自定义扩展自己的流模块。 之前已经在tbox数据位操作接口的使用一文中,简单介绍了下stream的位读写接口,这里继续详细介绍下stream的常用数据读写接口。 流的常用初始化操作 下面直接上代码吧,基本上看下注释就知道怎么使用了,嘿嘿。。。 继续阅读 »
2016-08-27 ruki
tbox主要有三种流: stream: 最常用的流,一般用于单路阻塞、非阻塞io的处理,接口简单易用 async_stream:异步流,基于asio的流,全程回调处理,可以在单个线程里支持多路流的并发,节省系统资源,提高效率 static_stream:静态流,用于对纯buffer的位流处理,一般用于各种解析器 不管是stream还是async_stream,都可以在其上挂接多路filter,实现流之间数据过滤和变换。目前支持以下几种filter: zip_filter:gzip、zlib的压缩和解压缩过滤器 charset_filter:字符集编码的过滤器 chunked_filter:http chunked编码的解码过滤器 继续阅读 »
2016-03-17 ruki
tbox中提供了常用的一些stream模块,例如:data、file、http、sock等,可以通过指定不同的url,使用相同的接口 进行数据流的读写,非常的方便。 例如: ```c // init stream tb_stream_ref_t stream = tb_stream_init_from_url("http://www.xxx.com/file.txt"); if (stream) { // open stream if (tb_stream_open(stream)) { // read line 继续阅读 »
2015-08-17 Alex Sun
参考资料: Stream Documentation stream-handbook Readable, Writable, and Transform Streams in Node.js 继续阅读 »
2016-08-12 ruki
tbox对于数据文件的解析提供了完善的支持,可以对各种二进制数据,文件数据流,网络数据流等进行各种解析操作 并且提供了一整套字节解析、比特位解析的接口,来支持各种流模式: stream 通用数据流,提供对流式数据的读写和解析,支持多层流嵌套以及各种协议(http, socket, file, data ...) 对于如何使用stream,这里暂时不详细介绍了,之后会单独重点介绍下,这里主要是为了描述,如何使用stream来处理字节数据的解析 例如,我要从数据流中,读取一个大端的16bits数值,很简单,只要: c tb_uint16_t value; if (tb_stream_bread_u16_be(stream, 继续阅读 »
2017-03-09 YongHao Hu
go
``` var maxFileSize int64 = 10 * 1000 * 1000 //limit upload file to 10m if r.ContentLength > maxFileSize { http.Error(w, "request too large", http.StatusExpectationFailed) return } r.Body = http.MaxBytesReader(w, r.Body, maxFileSize) 继续阅读 »
2016-02-05 ruki
新特性 自动检测所有系统libc接口,优先使用系统版本 支持自定义内存分配器,并且能够在debug模式下,获取每次分配的代码位置信息,用于自定义追踪 增加轻量级static_pool来维护整块buffer的内存分配,适合局部管理部分内存,pool虽然也能维护,但是底层基于large_pool,比较重量级,适合全局管理内存 增加stream快速读取全部数据到string的接口 增加adler32 hash算法 增加tb_memmem接口 采用pcre/pcre2/posix regex实现正则表达式库 改进 优化stream,支持对字符设备文件的读写 修改tb_init接口,增加allocator自定义内存分配器参数,实现用户的侵 继续阅读 »
2015-06-15 litaotao
1. failed to write data to stream 环境:ipython, OSX 操作:在ipython里import 一个pure module 问题: Python - ERROR - failed to write data to stream: ', mode 'w' at 0x104c8f150> 办法:export PYTHONIOENCODING=UTF-8 will solve it. 相关:stackoverflow 继续阅读 »
2016-02-04 ruki
这里为了使代码更加简洁,直接用了transfer来挂接两路流的传输操作。 ```c // 初始化文件输入流 tb_stream_ref_t istream = tb_stream_init_from_url("/home/file.txt"); // 初始化文件输出流 tb_stream_ref_t ostream = tb_stream_init_from_file("/home/file.gz", TB_FILE_MODE_RW | TB_FILE_MODE_CREAT | TB_FILE_MODE_BINARY | TB_FILE_MODE_TRUNC); // 初始化解压缩流,以istream作为输入 继续阅读 »
2016-10-16 王财勇
关键点一: 同一个stringstream对象来多次处理数据,每次使用前,使用stream.str("");保证数据已清空。 例如: std::stringstream ss; string result; ss << 1; ss>>result; //必须牢记使用stringstream两次输入,必须使用前清空 ss.clear(); ss.str(""); ss << 2; 又或者参看下面这段程序: ``` include include include using namespace std; /////////////////////////////////////////////////// 继续阅读 »