问题标签 [crc32]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
525 浏览

performance - 为什么 TeraSort 映射阶段在 CRC32.update() 函数中花费大量时间?

我正在尝试分析哪些函数在 TeraSort Hadoop 作业中消耗的时间最多。对于我的测试系统,我使用的是基本的 1 节点伪分布式设置。这意味着 NameNode、DataNode、Tasktracker 和 Jobtracker JVM 都在同一台机器上运行。

我首先使用 TeraGen 生成约 9GB 的数据,然后在其上运行 TeraSort。在 JVM 执行时,我使用 VisualVM 对其执行进行采样。我知道这不是最准确的分析器,但它是免费且易于使用的!我使用最新版本的 Apache hadoop 发行版,我的实验在基于 Intel Atom 的系统上运行。

当我查看 VisualVM 中 Hot Spots-Methods 的 Self time (CPU) 时,我发现 java.util.zip.CRC32.update() 函数占用了将近 40% 的总时间。当我在调用树中查看这个函数时,它是由映射器的 main() 函数调用的,特别是当 IdentityMapper.map() 从 HDFS 读取输入文件时。实际调用 CRC32.update() 函数的函数是 org.apache.hadoop.fs.FSInputChecker.readChecksumChunk()

我对此有三个问题:

  1. 为什么要为从 HDFS 读取的块更新 CRC32 校验和?如果我理解正确,一旦读取一个块,从磁盘读取的数据与块的 CRC 的简单比较应该是唯一的操作,而不是生成和更新块的 CRC 值。

  2. 我查找了更新函数的源代码,它是由 java.util.zip.CRC32.java 文件实现的。调用的特定函数是具有三个参数的重载 update() 方法。既然这个功能是用Java实现的,有没有可能多层抽象(Hadoop、JVM、CPU指令)降低了CRC计算的原生效率?

  3. 最后,我的 VisualVM 检测方法或对采样结果的解释是否存在严重问题?

谢谢,

0 投票
1 回答
724 浏览

crc32 - 32bit CRC和数据字长有什么关系?

如果我们采用 32 位 CRC,那么数据字大小将是 2 的 32(2**32) 次方加上 32 位的 CRC.... 我错过了什么吗?

如果我想用 Microsoft Visual C++ 编写代码来实现 32 位 CRC,那么我可以使用什么数据类型?也许我没有抓住重点,胡说八道。

基本上,实现 32 位 CRC 是我的任务,我完全不知道如何去做。

抱歉,如果问题含糊不清。任何对实现、逻辑或基本原理的帮助将不胜感激。

0 投票
1 回答
2009 浏览

crc - CRC24Q 实现

我正在尝试实现基于输入消息的 CRC 校验算法,该算法基本上创建了一个值。所以,考虑我有一个十六进制消息 3F214365876616AB15387D5D59,我想获取消息的 CRC24Q 值。我发现执行此操作的算法如下:

其中*输入=3F214365876616AB15387D5D59。问题是 ((*octets++) << 16) 会将十六进制字符的 ascii 值而不是字符本身移动 16 位。所以,我做了一个函数来将十六进制数字转换为字符。我知道实现看起来很奇怪,如果它是错误的,我不会感到惊讶。这是转换函数:

所以:

非常感谢您的任何建议。

0 投票
1 回答
1815 浏览

mysql - 考虑 RAM 的 url 或散列索引

我正在做一个需要每天添加/更新大约 100 万个网址的项目。有些日子主要是更新,有些日子主要是添加,有些日子是混合的。

因此,在每个查询中,都需要在 url 表中查找 url 的唯一性。

如何查找 url 可以非常快,因为目前索引设置在 url 列并且效果很好,但是在接下来的几周内,如果索引保持在同一列上并且新记录将以数百万计添加,那么 RAM 将不够用。

这就是为什么我正在寻找一种解决方案,以便当总共有 150+ 百万个 url 时,它的查找应该很快。我正在考虑在 md5 上创建索引,但随后担心碰撞机会。一位朋友提示我也计算 crc32 哈希并与 md5 连接以使冲突可能性为零并将其存储在 binary(20) 中,这样只有 20 个字节将被视为索引,而不是当前 varchar(255) 设置为 url 列数据的 255 个字节类型。

目前总共有大约 5000 万个 url,并且使用 8GB ram 可以正常工作。

昨天,我问了一个问题url 文本压缩(不是缩短)并存储在与同一项目相关的 mysql 中。

[编辑] 我想到了另一种解决方案,将 crc32 哈希仅以十进制形式放置以加快查找速度。并在应用程序级别移植检查返回的记录数。如果返回超过 1 条记录,则还应匹配准确的 url。这样,通过为每行存储 4 个字节而不是 20 个字节 (md5+crc32) 来保持 RAM 和磁盘空间的低负载也可以避免冲突。你说的话?

0 投票
3 回答
4598 浏览

java - Java 兼容的 cksum 函数

Java 中是否有任何库/代码可以以与 unix 中的 cksum 命令一致的方式计算字节流的 32 位 CRC?

0 投票
3 回答
1039 浏览

crc32 - .NET Micro 上的 CRC32 实现

我正在寻找可以在 .Net Micro 框架上使用的 CRC32 实现。我找到了这个实现,但是微框架还没有实现HashAlgorithm。让这个工作的最好方法是什么?

0 投票
1 回答
333 浏览

c++ - 如何使用现有的散列整数来索引散列表?

我目前正在使用 Boost for C++,并尝试使用 CRC32 实现无序映射(又名哈希表)。据我所知,它将一个字符串作为初始键,对其进行哈希处理,然后应用另一个操作,以便它适合存储桶的数量。

虽然在我的情况下,我想事先对字符串键进行哈希处理(在 Boost 中使用单独的 CRC 函数),然后使用该 ID 来索引表。我需要帮助的问题是 CRC32 哈希有 2^32 个潜在值,我怀疑我是否需要一个包含 2^32 个元素的表。在这种情况下我该怎么办?

感谢您在这里的任何帮助!

0 投票
0 回答
1628 浏览

java - Java:从流中更新 CRC32

我是否误解了使用CRC32CheckedInputStream类中的任何一个来通过不断更新最新输入来计算校验和?当输入 <= 128KiB 时,生成一个有效的 CRC32。任何大于 128KiB 且校验和失败。下面是我正在使用的一些代码(使用一个CRC32对象,BufferedInputStream但如果我使用 aCheckedInputStream来跟踪 CRC32,也会出现同样的问题)。

我将不胜感激任何建议或意见,谢谢

0 投票
1 回答
449 浏览

semantics - RAR 恢复记录的 NEWSUB_HEAD 中的 FileCRC 基于哪些数据?

我试图找出 RAR恢复记录标题中的 crc32 字段基于哪些数据。我正在尝试根据以前的 RAR 卷和提取的内容重新创建 RAR 卷。我已经到了只有 12 个字节与正确/原始卷不同的程度。

这些名称基于unrar 源代码(arcread.cpp) 或RAR 技术说明。

RAR 文件由块组成。它们有一个标题和一个正文:

标头包含描述正文的元数据。这些块之一是 HEAD_TYPE=0x74文件头(档案中的文件)。

字段 FILE_CRC(4 个字节)是根据 [body] 中的所有可用数据计算的,它是一个存储或压缩文件。

恢复记录的块(HEAD_TYPE=0x7a 子块)与文件块非常相似,但它在标头中包含三个额外的字段:

你会认为这个块的 FILE_CRC 是基于正文中的数据,就像文件块一样,但事实并非如此。(由其他人独立验证)所以我的问题是,用什么数据来计算这个 crc32?

我已经尝试过的一些事情:

  • 从 Protect+ 等开始。其次是身体
  • RR 子块开始之前的所有内容
  • 我在一个小 RAR 文件中强制使用了所有可能的范围。
0 投票
2 回答
4047 浏览

c++ - 如何使用谷歌测试测试一些代码?

基本上我试图在谷歌测试中开始一些单元测试,但不知道如何去做。我已经获得了一些代码来尝试和测试,但我不知道如何去做。这是我需要测试的一些代码吗?我应该从哪里开始?提前感谢您的帮助。