haskell - 在 Haskell 中从文件读取到数组

标签 haskell io binary

我的驱动器上有一个基于 trie 的字典,它被编码为连续的位封装 4 字节 trie 节点数组。在 Python 中,我将按以下方式将其读取为 4 字节整数的实际数组:

import array
trie = array.array('I')
try:
    trie.fromfile(open("trie.dat", "rb"), some_limit)
except EOFError:
    pass

如何在 Haskell 中执行相同操作(从文件读取到数组或向量)?我能想到的最好办法是照常读取文件,然后将字节分成四个 block ,并以算术方式将它们组合在一起,但这非常难看,而且还引入了对字节顺序的依赖。

最佳答案

encoded as a contiguous array of bit-packed 4-byte trie nodes

我认为这里的“编码”是某种 Python 格式?你说“原始 C 风格数组”?

要将此二进制文件(或任何其他格式)的数据加载到 Haskell 中,您可以使用 Data.Binary图书馆,并提供 an instance of Binary为您的自定义格式。

对于许多现有的数据交换格式,Hackage 上有库,但您需要指定格式。例如图像数据,有repa-devil .

对于真正的原始数据,您可以mmap it to a bytestring ,然后将其进一步处理成数据结构。

关于haskell - 在 Haskell 中从文件读取到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15232094/

相关文章:

haskell - GHC 泛型 : How to write an implementation of (:+:) that converts sum types from/to integers?

java - Java从文本文件中读取输入

java - Java中如何将输入流连接到输出流?

parsing - 如何以二进制流格式解析 OpenFoam polyMesh?

c++ - 在字符串中将十进制转换为二进制时出错

haskell - 如何在 haskell 中使用 getLine 或 getChar ?

haskell - 从列表中提取Haskell中的单个整数

objective-c - 如何在 iOS/OS X 中将 HTML 转换为 Markdown?有什么方法可以在应用程序中使用 pandoc 吗?

c - 关于操作系统的进程安排?

javascript - 在浏览器上解压 C 结构体?