string大家都很熟悉,不过用过buffer,或者见过buffer的恐怕少之又少了
将string和buffer一起讨论是因为他们有些共性
string 和 buffer 都是一个 int * 就是整数数组
而且他们每个元素的值都是0~255范围,
不同的是string是以0结尾的,而buffer不是。
就是说,在string中,如果它碰到一个元素的值为0就表示结束了
而buffer就不同,它可以包含只为0的元素。
buffer 主要是用在要处理包含0的“string”的时候
最常见的就是处理binary文件,而string就用来处理ascii编码文件
LPC里面的buffer远远没有string好用,
第一,初赋值困难
与其他数据类型相比,很难对它赋一个“没有”的初值,因为buffer的值不能像其他
的类型那样用文字常量来表示(0 (: :) ({}) ([]) "" 这些都是文字常量),这点和object一样
它只能通过相关的efun来初赋值,但是比起object来,它支持的efun太少,只有两个
read_buffer和write_buffer,这两个efun都可以返回一个buffer,但是前提要求都是
必须指明一个文件,通过读写这个文件来取得一个buffer
所以,为了给一个buffer赋一个“没有”的初值,你必须准备一个空的“常规文件”
第二,一旦给一个buffer 分配了内存空间,它就不能像array那样动态增加长度
就是说一旦 buffer buf = allcoate_buffer(100),那么这个buffer的长度永远是
100除非你用另一个buffer来赋值给它,例如 buf = buf2;但是这样又碰到我们先前
说道过的另一个问题,这个赋值只是给了一个指针,所以必须这样 buf = buf2 + allocate_buffer(0);
对buffer的主要研究完全集中在那两个efun上,当然,要记住它是一个int array
最常见的就是处理binary文件,而string就用来处理ascii编码文件
LPC里面的buffer远远没有string好用,
第一,初赋值困难
与其他数据类型相比,很难对它赋一个“没有”的初值,因为buffer的值不能像其他
的类型那样用文字常量来表示(0 (: :) ({}) ([]) "" 这些都是文字常量),这点和object一样
它只能通过相关的efun来初赋值,但是比起object来,它支持的efun太少,只有两个
read_buffer和write_buffer,这两个efun都可以返回一个buffer,但是前提要求都是
必须指明一个文件,通过读写这个文件来取得一个buffer
所以,为了给一个buffer赋一个“没有”的初值,你必须准备一个空的“常规文件”
第二,一旦给一个buffer 分配了内存空间,它就不能像array那样动态增加长度
就是说一旦 buffer buf = allcoate_buffer(100),那么这个buffer的长度永远是
100除非你用另一个buffer来赋值给它,例如 buf = buf2;但是这样又碰到我们先前
说道过的另一个问题,这个赋值只是给了一个指针,所以必须这样 buf = buf2 + allocate_buffer(0);
对buffer的主要研究完全集中在那两个efun上,当然,要记住它是一个int array