erlang binary

  matches -> 始终与最长的进行匹配

match  -> 始终与第一个进行匹配

longest_common_prefix -> 共同的前缀的长度

longest_common_suffix -> 共同的后缀的长度

binary:part(<<1,2,3,4,5,6,7>>, {3,4})  ==  binary:part(<<1,2,3,4,5,6,7>>, {7,-4}).

referenced_byte_size -> 一个2进制数据的引用长度

exp:1> A = binary:copy(<<1>>,100).
    <<1,1,1,1,1 ...
  2> byte_size(A).
    100
  3> binary:referenced_byte_size(A)
    100
  4> <<_:10/binary,B:10/binary,_/binary>> = A.
    <<1,1,1,1,1 ...
  5> byte_size(B).
    10
  6> binary:referenced_byte_size(B)
    100

获取的结果是100,而不是10,我们想要的只是一个小数据,但是引用却占了很大的资源,一般用binary:copy该资源,在使用copy后的资源

时间: 2024-11-06 11:47:11

erlang binary的相关文章

erlang binary数据转换的问题

erlang提供了binary_to_term,把一个二进制数据转为原始的erlang数据.但是,这个函数也有副作用.如果直接将对端传来的数据做一次 binary_to_term,就可能会导致VM crash掉. binary_to_term 副作用 这是因为二进制数据带有原子时,binary_to_term会生成这些原子.但VM原子总数是有限制,而且原子不参与GC.假如数据带有原子数量超过erlang VM限制,就会导致VM crash 所以,针对这个问题,erlang提供了另外一个函数 bi

Erlang process structure -- refc binary

Erlang 的process 是虚拟机层面的进程,每个Erlang process 都包括一个 pcb(process control block), 一个stack 以及私有heap . 这部分的姿势, 在各种论文中都有提到. 网上也有各种各样的解读,包括但不仅限于: 1, http://fengchj.com/?p=2255 2, http://blog.csdn.net/mycwq/article/details/26613275 那么, 从现有的资料,可以看出,正因为在Erlang 虚

关于erlang的binary

引自:http://cryolite.iteye.com/blog/1547252 1. binary数据是可以在不同进程间共享的 当然这些进程都在同一Erlang节点上. 这与普通term不同,后者作为消息在进程间传递时是要在接收进程中做拷贝的(当然atom数据例外,它们也不会做拷贝).摘一段原文在这里: All data in messages between Erlang processes is copied, with the exception of refc binaries on

Erlang 标准库 binary

split(Subject, Pattern, Options) -> Parts 将 Subject 按照 Pattern 分隔成列表,如果 Options global 没有给定,默认按照 Pattern 第一个模式来分隔 Subject. 1> binary:split(<<1,255,4,0,0,0,2,3>>, [<<0,0,0>>,<<2>>],[]). [<<1,255,4>>,<

对Erlang开发者的几点建议

* 确保没有任何编译警告 * Erlang中String采用list实现,32位系统中,其1个字符用8个字节的空间(4个保存value, 4个保存指针).因此string速度较慢,空间占用较大 * 在Server中,总是尽力书写尾递归(tail-recursive)的函数 * 使用'++'时,left list会被拷贝,然后添加到right list的头部,因此最好把length较短的list放在左侧 * 避免使用regexp,如果需要正则表达式,请使用re * timer模块的大部分函数实现,

Php与Erlang的Socket通信

?? 一般来说网络通讯经常使用的方式有2种:文本通讯和二进制通讯. php与erlang之间实现文本通讯比較简单.这里就不做讨论,本文主要讨论的是php与erlang实现二进制通讯的实现方法.实现过程例如以下: erlang端代码: -module(server). -export([start/0]). -define( UINT, 32/unsigned-little-integer). -define( INT, 32/signed-little-integer). -define( US

Erlang tool -- recon

遇见recon 以来, 每次定位系统瓶颈, 总是能让我眼前一亮. 比如说, 定位非尾递归导致的内存暴涨, 定位引发CPU满载的进程.得心应手,每每额手称庆. recon 是ferd 大神 释出的一个 用于生产环境诊断Erlang 问题的一个工具, 不仅仅是对Erlang stdlib 接口的封装, 还有memory fragmentation 相关的函数. CPU 统计相关 在ferd 大神放出的 Erlang_In_Anger 中提到了 The reduction count has a di

使用erlang实现简单的二进制通信协议

最近实现的一种简单的协议以及工具,主要用于客户端服务端通讯传输二进制数据时,协议的解包与封包,具体如下:首先定义协议的格式,主要由三部分组成:        数据长度(数据部分长度+协议号长度):4个字节        协议号:2个字节        数据部分:2进制数据数据部分如果是字符串需要先计算字符串的长度,占2个字节,之后再紧跟字符串内容,以上三个部分构成一个完整的数据包,每次客户端服务端将数据进行以上格式的封包解包进行通信.下面是对一个协议号为10000的协议进行封包的例子:客户端向服

iOS推送通知(Push Notification)的Erlang实现

本文来自:瑞仙的Erlang开发博客 原文链接:http://blog.csdn.net/zhongruixian/article/details/39528765 一.前言 关于cer/pem证书转换,网上很多资料,我这就不说了, 网上有PHP实现的Push Notification,可以参考, 为了更好的做PUSH服务定制,我这里以Erlang(gen_server)实现iOS Push Notification 二.协议 1.协议分析 表1 名称 长度 描述 Command 1 字节 固定