【问题标题】:Reading a large structured binary file in Julia在 Julia 中读取大型结构化二进制文件
【发布时间】:2018-01-16 18:19:15
【问题描述】:

我有一个具有这种内存布局的包含相同记录的大型二进制文件

# Julia code
struct Event
    ia::Int32
    ig::Int32
    Eg::Float64
    Tg::Float64
    xn::Float64
    yn::Float64
    zn::Float64

    # uninitialized constructor
    Event() = new()
end

如何在 Julia 中翻译这段 C++ 代码?

// C++ code
struct Event
{
  int32_t ia;  
  int32_t ig;  
  double  Eg; 
  double  Tg;
  double  xn; 
  double  yn;
  double  zn;
};

// ... compute event_count

std::ifstream in(filename,std::ifstream::binary);
std::vector<Event> array(event_count);

in.read((char*)array.data(), event_count*sizeof(Event)); // <- Julia way: how to?

【问题讨论】:

    标签: julia binaryfiles


    【解决方案1】:

    您可以使用read(filename, Event, n),其中n 是您要读取的元素数(目标向量的大小)。实际上n 可以是例如一个给出输出数组维度的元组。

    您可以查看read函数的帮助以获取其他选项。

    【讨论】:

    • 它已被弃用(0.7)并且可能每次都分配 n 大小的向量。新方法类似于buffer = Array{Event}(uninitialized, n); read!(filename, buffer),它与所讨论的 C++ 有点相似。问题是缺少gcount,如果n 大于可以从文件中提取的事件数。
    • @Liso 感谢您提供这些有趣的附加信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 2011-05-08
    相关资源
    最近更新 更多