如何从字节数组中获取 NetcdfFile?

How do I get a NetcdfFile out of a byte array?

我对使用 netcdf-java 库还比较陌生,在尝试加载文件时我立即 运行 遇到了问题。问题是似乎没有办法从存储在内存中的字节数组加载 NetcdfFile,这是我的数据的基本形式。详细一点,其实就是通过客户端上传一个.cdf文件,然后客户端将其转换成字节数组,供服务端代码读取。所以我的代码是 运行ning 的服务器根本看不到上传的文件。我也不能假设服务器本身是可写的,所以基本上没有“位置”可以传递给典型的 NetcdfFile 加载方法。

ucar.edu 上的常见问题解答确实提到了从非文件源 here 读取的可能性。它说我应该编写自己的 IOSP,我很乐意这样做。但是,关于如何执行此操作的指导很少。

当唯一传递给函数的是 RandomAccessFile 时,我不知道如何实现 isValidFile,常见问题解答中说可以忽略它。

我不知道我的 IOSP 将如何获得有问题的字节数组以用于 readData

我不知道为什么常见问题解答中的最小示例建议我创建一个新的 NetcdfFile class,而我似乎可以只使用默认文件但传入我的自定义 IOSP。

这个问题有点含糊,但我真的很迷茫,不知道从哪里开始。任何指导将不胜感激。

编辑:我正在使用 netcdf-java 库的 5.4.2。

我在 support archives 中找到了这个答案。解决方案是使用InMemoryRandomAccessFile。构造函数采用一个字符串位置和一个包含文件内容的字节数组。根据我的测试,我认为该位置可以是任意字符串。这是对我有用的代码。

byte[] filebytes = retrieveFileBytes(clientFilepath);
InMemoryRandomAccessFile raf = new InMemoryRandomAccessFile(clientFilepath, filebytes);

NetcdfFile file = NetcdfFiles.open(raf, clientFilepath, null, null);
Variable peakRetentionTime = file.findVariable("peak_retention_time");
if (peakRetentionTime == null) {
    displayWarning("peak_retention_time null!");
} else {
    Array data = peakRetentionTime.read();
    displayInfo(Ncdump.printArray(data));
}