0

我有一个处理脚本,其中我正在从一个不断更新的非常大的文件中绘制一小部分数据。数据将根据用户输入随机访问,因此为了提高速度而不将整个文件加载到内存中,我一直将文件作为 ByteBuffer 进行内存映射。这在本地机器上运行时效果非常好,但不幸的是,该项目的最终目标是 Web 小程序。有没有一种从小程序中访问的文件创建内存映射或随机访问文件结构的好方法?我看了很多 URL.openStream(),但不知道如何将 InputStream 变成我需要的。这是我为离线应用程序所拥有的:

//within my GraphicPlot class:

ByteBuffer bbuf;
FileChannel fc;

SetUpPlot(String fileName){    
  try {
    FileInputStream instream = new FileInputStream(fileName);
    fc = instream.getChannel();
    bbuf = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
  }
  catch (IOException e) { 
   e.printStackTrace();
   exit();
  } 
}

无论我如何将 URL 发送到函数(绝对 URL、相对 URL 等),我都会收到文件未找到错误。

任何帮助将不胜感激!

编辑:我可能应该提到小程序将被签名,并且有问题的文件将托管在与小程序相同的目录中,因此不应该有任何小程序权限问题。

4

1 回答 1

0

FileInputStream 和内存映射仅适用于本地系统上的文件。您无法记忆映射只能通过 http 或其他协议获得的文件。要使用 FileInputStream 或内存映射,您必须首先在本地系统上进行复制。

这不是 Java 的限制,而是操作系统的限制。

于 2012-07-18T05:53:40.007 回答