- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
当我创建很多 Buffer
时,它们并不总是空的:
for (var i = 0; i < 100; i++) {
console.log((new Buffer(30)).toString('hex'));
}
(部分)输出:
782668013a0000003b00000035000000b0c17900391100003c0000003d00
e4216801ffffffff000000000100000000000000000000003e0000003f00
40c27900100000000100000000000000000000000000000018c379000000
000000000000000000000000000000000000000000000000000000000000 --> Empty
000000000000000000000000000000000000000000000000000000000000 --> Empty
0000000000000000108269014000000041000000c86f79000cf679000000
6611000080c27900c0c27900040000000100000000000000d0c279000000
00000000000000005c2468014200000043000000cc6f7900002668014400
(部分)输出(没有 .toString('hex')
和只有 new Buffer(10)
):
<Buffer 01 00 00 00 58 db 62 00 b4 86>
<Buffer 90 b9 65 00 08 00 00 00 03 00>
<Buffer 10 ba 65 00 04 00 00 00 00 00>
<Buffer 04 00 00 00 00 00 00 00 00 00>
<Buffer 10 00 00 00 00 00 00 00 70 ba>
<Buffer 00 00 00 00 00 00 00 00 00 00> --> Empty
<Buffer 00 00 00 00 00 00 00 00 00 00> --> Empty
<Buffer ff ff ff ff ff ff ff ff 00 00>
<Buffer 00 00 00 00 0f 00 00 00 8c 6f>
<Buffer 80 ba 65 00 00 00 00 00 aa 00>
我在 32 位 Windows 7 机器上运行 node.js v0.10.33
。
Buffer
吗?更新:在 v0.11.14
上表现更好,在 v0.8.28
最佳答案
tl;dr
Buffer.prototype.fill
清除它这很可能是使用处理内存分配的 API(例如 Buffer)时所期望的。
Buffer
实际上使用的是 smalloc
模块,您可以将其视为 malloc(3)/free(3) 来自 stdlib.h
malloc 背后的原理是它只为指针分配/保留内存 - 在 webkit 中,它可能看起来更接近对象上的 ExternalArray 的 calloc。
参见 http://linux.die.net/man/3/malloc
The malloc() function allocates size bytes and returns a pointer to the allocated memory. The memory is not initialized.
内存分配/解除分配不处理内存初始化,因为遍历每个字节并将其设置为 0 的开销更大。
此外,0 并不总是您需要的字节初始值。
并且由于内存分配可以返回一 block 之前已被其他进程使用过的内存块,因此预计新分配的 block 中会有数据。
一般规则是:分配内存时(例如 Buffer 所做的),如果您需要它会初始化使用 buf.fill(0)
;尽管这并不总是需要的,因为在大多数情况下,当您需要 Buffer 时,您已经知道数据的长度,隐含的内容。
例如,当您创建 new Buffer(30)
时,您知道您的数据有 30 个字节长,这意味着您已经知道要写入的数据是什么样的,所以在在将缓冲区传递给其他东西之前,您很可能最终会写入每个字节 - 因此无需预先添加将每个字节设置为 0 的额外初始化循环。
对于使用字节作为对象标志/状态的缓冲区,您只能初始化它们。
例如如果您的 Buffer(10)
使用前 2 个字节作为某些状态的标志,而其他 8 个字节用于数据,则只执行buffer[0] = buffer[1] = 0
,将它们设置为初始值 0,而不是初始化所有 10 个字节,然后对最后 8 个字节进行写入。
最后一点:如果内存分配返回的内存块以前没有被使用过,那么是的,所有字节都设置为 0。但是,内存处理是操作系统所做的事情——使用各种优化——因此它是无法预测您将获得哪个内存段及其内容。
关于javascript - node.js 缓冲区不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27167350/
我已经为使用 JGroups 编写了简单的测试。有两个像这样的简单应用程序 import org.jgroups.*; import org.jgroups.conf.ConfiguratorFact
我有一个通过 ajax 检索的 json 编码数据集。我尝试检索的一些数据点将返回 null 或空。 但是,我不希望将那些 null 或空值显示给最终用户,或传递给其他函数。 我现在正在做的是检查
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Why does one often see “null != variable” instead of “
嗨在我们公司,他们遵循与空值进行比较的严格规则。当我编码 if(variable!=null) 在代码审查中,我收到了对此的评论,将其更改为 if(null!=variable)。上面的代码对性能有影
我正在尝试使用 native Cordova QR 扫描仪插件编译项目,但是我不断收到此错误。据我了解,这是代码编写方式的问题,它向构造函数发送了错误的值,或者根本就没有找到构造函数。那么我该如何解决
我在装有 Java 1.8 的 Windows 10 上使用 Apache Nutch 1.14。我已按照 https://wiki.apache.org/nutch/NutchTutorial 中提
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: what is “=null” and “ IS NULL” Is there any difference bet
Three-EyedRaven 内网渗透初期,我们都希望可以豪无遗漏的尽最大可能打开目标内网攻击面,故,设计该工具的初衷是解决某些工具内网探测速率慢、运行卡死、服务爆破误报率高以及socks流
我想在Scala中像在Java中那样做: public void recv(String from) { recv(from, null); } public void recv(String
我正在尝试从一组图像补丁中创建一个密码本。我已将图像(Caltech 101)分成20 X 20图像块。我想为每个补丁创建一个SIFT描述符。但是对于某些图像补丁,它不返回任何描述符/关键点。我尝试使
我在验证器类中自动连接的两个服务有问题。这些服务工作正常,因为在我的 Controller 中是自动连接的。我有一个 applicationContext.xml 文件和 MyApp-servlet.
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭10 年前。 问题必须表现出对要解决的问题的最低程度的了解。告诉我们您尝试过做什么,为什么不起作用,以
大家好,我正在对数据库进行正常的选择,但是 mysql_num_rowsis 为空,我不知道为什么,我有 7 行选择。 如果您发现问题,请告诉我。 真的谢谢。 代码如下: function get_b
我想以以下格式创建一个字符串:id[]=%@&stringdata[]=%@&id[]=%@&stringdata[]=%@&id[]=%@&stringdata[]=%@&等,在for循环中,我得到
我正在尝试使用以下代码将URL转换为字符串: NSURL *urlOfOpenedFile = _service.myURLRequest.URL; NSString *fileThatWasOpen
我正在尝试将NSNumber传递到正在工作的UInt32中。然后,我试图将UInt32填充到NSData对象中。但是,这在这里变得有些时髦... 当我尝试将NSData对象中的内容写成它返回的字符串(
我正在进行身份验证并收到空 cookie。我想存储这个 cookie,但服务器没有返回给我 cookie。但响应代码是 200 ok。 httpConn.setRequestProperty(
我认为 Button bTutorial1 = (Button) findViewById(R.layout.tutorial1); bTutorial1.setOnClickListener
我的 Controller 中有这样的东西: model.attribute("hiringManagerMap",hiringManagerMap); 我正在访问此 hiringManagerMap
我想知道如何以正确的方式清空列表。在 div 中有一个列表然后清空 div 或列表更好吗? 我知道这是一个蹩脚的问题,但请帮助我理解这个 empty() 函数:) 案例)如果我运行这个脚本会发生什么:
我是一名优秀的程序员,十分优秀!