对于用lua实现ByteArray和ByteArrayVarint感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解luastringbyte,并且为您提供关于5——深浅复制、bytes和by
对于用lua实现ByteArray和ByteArrayVarint感兴趣的读者,本文将提供您所需要的所有信息,我们将详细讲解lua string byte,并且为您提供关于5——深浅复制、bytes和bytearray、linux用户、actionscript-3 – 如何将bytearray转换为图像或图像到bytearray?、ByteArrayInputStream与ByteArrayOutputStream、ByteArrayOutputStream和ByteArrayInputStream详解的宝贵知识。
本文目录一览:- 用lua实现ByteArray和ByteArrayVarint(lua string byte)
- 5——深浅复制、bytes和bytearray、linux用户
- actionscript-3 – 如何将bytearray转换为图像或图像到bytearray?
- ByteArrayInputStream与ByteArrayOutputStream
- ByteArrayOutputStream和ByteArrayInputStream详解
用lua实现ByteArray和ByteArrayVarint(lua string byte)
许多 Actionscript 程序员已经从 Flash 转到 Cocos2d-x 了。那么以前的那些超级好用的类库都不见了,只好重新来过。
我利用 Lua 和 lpack 库实现了一套 lua版本的 ByteArray 。这套库用于 quick-cocos2d-x(后称quick) 中。因此依赖一些 quick 中已经包含的c库和lua库 。
主要依赖如下:
- lpack (已经包含在quick中)
- BitOp (已经包含在quick中)
-
quick framework
utils.ByteArray
ByteArray依赖 lpack 。
lpack 其实已经足够好用了。但是由于lpack的指针功能有限,所以使用起来还是有些麻烦。这个类模仿了 Actionscript 的 flash.utils.ByteArray ,指针在内部实现,方便读取和缓存 socket 服务器数据。
当然了,有一点点不同,但或许更好用。
下面是使用ByteArray的例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
|
下面就是效果了:
utils.ByteArrayVarint
ByteArrayVarint 继承 ByteArray,同时依赖 BitOp。
ByteArrayVarint 实现了 google protocol buffer协议中的Varint编码 。
Protocol Buffer协议是何方神圣,google一下就知道。简单说就是能大幅降低 socket 协议中传递的字节流的长度。但是protocol buffer协议还包含许多东西,而我只需要 varint 编码而已。
我们的上一个游戏就在 AS3中实现了varint编码 。现在又用lua实现了一遍。
方法名称 | 说明 |
---|---|
ByteArrayVarint.readUVInt() | read a unsigned varint int |
ByteArrayVarint.writeUVInt() | write a unsigned varint int |
ByteArrayVarint.readVInt() | read varint int |
ByteArrayVarint.writeVInt() | write varint int |
ByteArrayVarint.readStringUVInt() | read a string preceding a unsigned varint int |
ByteArrayVarint.writeStringUVInt() | write a string preceding a unsigned varint int |
虽然lua支持64位数字,但由于 BitOp 仅支持32位有符号整数,这个 ByteArrayVarint 类能做的事情有限,甚至比AS3的都要差点(AS3好歹还支持32位无符号整数)。但如果程序中不使用变态的64位(或更高)数字的话,还是挺好的。
我会把常用的 lua 功能写出来整合在这个库里并开源,就像我的 as3库 和 java库 一样。
本文链接:http://zengrong.net/post/1968.htm
5——深浅复制、bytes和bytearray、linux用户
深浅复制
深浅复制只有在列表嵌套列表的情况下讨论
如果想保留修改之前的数据,就可以使用列表的复制,但要注意列表嵌套情况下的问题
l1 = [1,[2, 3]]
l2 = l1.copy()
#copy 浅复制 随着l1或l2的改变而发生改变
#浅复制只能改变第一层列表的数据,不能改变列表中嵌套的数据
import copy
l3 = copy.deepcopy(l1)
#深复制 能改变列表中所有嵌套的数据
bytes二进制序列类型
01 指定长度的零填充字节对象:
[in] bytes(3)
[out] b''\x00\x00\x00''
02 二进制字符串对象:
[in] bytes(b''abc'')
[out] b''abc
bytearray二进制数组
01 指定长度的零填充字节对象:
bytearray(3)
02 二进制字符串对象:
bytearray(b''abc'')
Linux用户
查看所有用户:
cat /etc/passwd
#将用户保存至文件中
cat /etc/passwd > user.list
''>''输出定向(覆盖)
''>>''追加进去
1:属主 2:用户组里边的其他用户 3:其他用户组
(4)r:可读 (2)w:可写 (1)x:可执行 (7)rwx(全部权限)
#修改权限执行代码
chmod 000 a.py
对可执行(x)文件进行执行
./a.py
无法直接执行时需要在vim里面加入 #!/usr/bin/python3
用户名称:用户密码:用户标记号:组标记号:相关注释:主目录:使用的Shell
在Linux中有三种用户,超级用户、系统用户和普通用户:
超级用户:就是root用户,具有超级权限,可以操作任何文件,日常使用中应该避免使用它, 在ubuntu中root用户默认没有隐藏,自动生成随机密码
系统用户:是系统正常使用时使用的账户,如bin、mail等,但是系统用户不能够登录
普通用户:是普通使用者,能够使用Linux大部分资源,但是一些特定的权限受到控制
用户组:
Linux中除啦用户之外还有用户组的概念,用户组就是具有相同特征的用户的用户集合。每个用户都有对应的用户组
查看用户组:
cat /etc/group
actionscript-3 – 如何将bytearray转换为图像或图像到bytearray?
我有面板控件,并希望从webservice加载图像作为backgroundimage.所以我使用setstyle()但不接受该图像.所以如何将该图像添加到我的面板背景图像中.请在此处告诉我您的想法.
解决方法
yourImage.source = yourByteArray;
问候!
ByteArrayInputStream与ByteArrayOutputStream
第一次看到ByteArrayOutputStream的时候是在Nutch的部分源码,后来在涉及IO操作时频频发现这两个类的踪迹,觉得确实是很好用,所以把它们的用法总结一下。
ByteArrayOutputStream的用法
以下是JDK中的记载:
public class ByteArrayOutputStream extends OutputStream
此类实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray()和 toString()获取数据。
关闭 ByteArrayOutputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何IOException。
我的个人理解是ByteArrayOutputStream是用来缓存数据的(数据写入的目标(output stream原义)),向它的内部缓冲区写入数据,缓冲区自动增长,当写入完成时可以从中提取数据。由于这个原因,ByteArrayOutputStream常用于存储数据以用于一次写入。
实例:
从文件中读取二进制数据,全部存储到ByteArrayOutputStream中。
FileInputStream fis=new FileInputStream("test");
BufferedInputStream bis=new BufferedInputStream(fis);
ByteArrayOutputStream baos=new ByteArrayOutputStream();
int c=bis.read();//读取bis流中的下一个字节
while(c!=-1){
baos.write(c);
c=bis.read();
}
bis.close();
byte retArr[]=baos.toByteArray();
ByteArrayInputStream的用法
相对而言,ByteArrayInputStream比较少见。先看JDK文档中的介绍:
public class ByteArrayInputStreamextends InputStreamByteArrayInputStream 包含一个内部缓冲区,该缓冲区包含从流中读取的字节。内部计数器跟踪 read 方法要提供的下一个字节。
关闭 ByteArrayInputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException。
构造函数:
ByteArrayInputStream(byte[] buf)
注意它需要提供一个byte数组作为缓冲区。
与大部分Inputstream的语义类似,可以从它的缓冲区中读取数据,所以我们可以在它的外面包装另一层的inputstream以使用我们需要的读取方法。
个人认为一个比较好的用途是在网络中读取数据包,由于数据包一般是定长的,我们可以先分配一个够大的byte数组,比如byte buf[]=new byte[1024];
然后调用某个方法得到网络中的数据包,例如:
Socket s=...;
DataInputStream dis=new DataInputStream(s.getInputStream());
dis.read(buf);//把所有数据存到buf中
ByteArrayInputStream bais=new ByteArrayInputStream(buf); //把刚才的部分视为输入流
DataInputStream dis_2=new DataInputStream(bais);
//现在可以使用dis_2的各种read方法,读取指定的字节
比如第一个字节是版本号,dis_2.readByte();
等等……
上面的示例的两次包装看上去有点多此一举,但使用ByteArrayInputStream的好处是关掉流之后它的数据仍然存在。
ByteArrayOutputStream和ByteArrayInputStream详解
ByteArrayOutputStream类是在创建它的实例时,程序内部创建一个byte型别数组的缓冲区,然后利用ByteArrayOutputStream和ByteArrayInputStream的实例向数组中写入或读出byte型数据。在网络传输中我们往往要传输很多变量,我们可以利用ByteArrayOutputStream把所有的变量收集到一起,然后一次性把数据发送出去。具体用法如下:ByteArrayOutputStream: 可以捕获内存缓冲区的数据,转换成字节数组。
ByteArrayInputStream: 可以将字节数组转化为输入流

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

如上所示,ByteArrayOutputStream把内存中的数据读到字节数组中,而ByteArrayInputStream又把字节数组中的字节以流的形式读出,实现了对同一个字节数组的操作.
综合DataOutputStream&DataInputStream的作用和功能,与ByteArrayOutputStream和ByteArrayInputSream使用将更方便.此时DataOutputStream&DataInputStream封闭了字节流,以适当的形式读出了字节数组中的数据.如下所示:

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

关于用lua实现ByteArray和ByteArrayVarint和lua string byte的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于5——深浅复制、bytes和bytearray、linux用户、actionscript-3 – 如何将bytearray转换为图像或图像到bytearray?、ByteArrayInputStream与ByteArrayOutputStream、ByteArrayOutputStream和ByteArrayInputStream详解等相关内容,可以在本站寻找。
本文标签: