如何从applet加载在线托管的随机访问或内存映射文件

时间:2012-07-18 04:19:52

标签: java applet processing bytebuffer fileinputstream

我有一个Processing脚本,我正在从一个不断更新的非常大的文件中绘制一小部分数据。数据将根据用户输入随机访问,因此在不将整个文件加载到内存中的情况下提高速度我已将内存映射为ByteBuffer。在本地计算机上运行时,这非常有效,但不幸的是,项目的最终目标是Web applet。是否有一种从applet中访问的文件创建内存映射或随机访问文件结构的好方法?我看了很多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等),我都会收到一个找不到文件的错误。

非常感谢任何帮助!

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

1 个答案:

答案 0 :(得分:0)

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

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