Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为J2ME应用程序中使用的一组密钥对值编制索引_Java_File_Java Me_Indexing - Fatal编程技术网

Java 为J2ME应用程序中使用的一组密钥对值编制索引

Java 为J2ME应用程序中使用的一组密钥对值编制索引,java,file,java-me,indexing,Java,File,Java Me,Indexing,我将在j2me应用程序中使用大约1000个密钥对值,从资源文件中读取。然而,根据应用程序逻辑内部生成的记录编号,我将在任何时候只使用其中的几个值,比如10。将所有值加载到内存中,然后进行查找并不是一个有效的选择,因为我不会使用所有记录。是否有更好的方案来存储文件中的值、索引或其他内容,以便我可以通过跳过文件中的字节数来检索这些密钥对值,以访问和读取适当的记录?由于这是jar中的一个资源文件,因此不会对其进行任何修改 如果在创建记录时知道记录长度,则可以将记录以二进制格式写入文件。但是,在每个记录

我将在j2me应用程序中使用大约1000个密钥对值,从资源文件中读取。然而,根据应用程序逻辑内部生成的记录编号,我将在任何时候只使用其中的几个值,比如10。将所有值加载到内存中,然后进行查找并不是一个有效的选择,因为我不会使用所有记录。是否有更好的方案来存储文件中的值、索引或其他内容,以便我可以通过跳过文件中的字节数来检索这些密钥对值,以访问和读取适当的记录?由于这是jar中的一个资源文件,因此不会对其进行任何修改

如果在创建记录时知道记录长度,则可以将记录以二进制格式写入文件。但是,在每个记录的开头,您可以首先写入一个数字,以字节为单位指示其大小,然后使用RandomAccessFile通过移动文件指针来访问记录。 但就速度而言,加载到内存中的速度要比读取文件快,但如果内存很高,那么文件也不是一个坏方法


Jeff

如果在创建记录时知道记录长度,可以将记录以二进制格式写入文件。但是,在每个记录的开头,您可以首先写入一个数字,以字节为单位指示其大小,然后使用RandomAccessFile通过移动文件指针来访问记录。 但就速度而言,加载到内存中的速度要比读取文件快,但如果内存很高,那么文件也不是一个坏方法


Jeff

跳过jar中压缩的资源文件中的字节也不是最理想的,调用Class后得到的InputStream实现。如果计划在多个设备上运行应用程序,getResourceAsInputStream()可能会出现碎片

在注释中的附加信息后编辑:

最好的方法可能是将(问题、答案)数据存储在1000个不同的类中

作为一个解决方案,这会让人觉得很奇怪,但是类加载器应该只加载您实际使用的10个类,您可以使用一个简单的J2SE程序生成1000个源文件,您可以使用
java.lang.class.forName()
根据名称中的整数加载10个随机类


如果jar文件没有变得太大而无法使用,基本上,类加载器的性能依赖于对其zip文件格式的索引…

在jar中跳过压缩资源文件中的字节也不是最佳的,调用class.getResourceAsInputStream()后得到的InputStream实现如果计划在多台设备上运行应用程序,则可能会出现碎片

在注释中的附加信息后编辑:

最好的方法可能是将(问题、答案)数据存储在1000个不同的类中

作为一个解决方案,这会让人觉得很奇怪,但是类加载器应该只加载您实际使用的10个类,您可以使用一个简单的J2SE程序生成1000个源文件,您可以使用
java.lang.class.forName()
根据名称中的整数加载10个随机类


如果jar文件没有变得太大而无法使用,那么您基本上依靠对其zip文件格式的索引来实现类加载器性能…

谢谢,但是这种在每条记录之前写入字节数的方法确实提供了索引的优势。假设,如果我需要取第512条记录。我不是直接跳过n个字节来获取记录,而是必须先获取该记录的大小,然后跳过bytesTrue的数量,但是您可以将记录大小存储在内存中,或者更具体地说,存储获取rec1(0字节)、rec2(rec1.length)、rec3(rec1.length+rec2.length)所需的字节数,等等。虽然您仍然需要将其存储在内存中,但您只为每个记录存储一个int(或long),而不是整个记录。此外,我假设每个记录的大小不是恒定的。如果是的话,那么你知道这只是重新长度*(recNum-1)你的意思是说将索引存储为一个单独的文件,并使用它从原始文件或其他文件中读取内容?我的意思是在记录之前将索引存储在文件中,然后在应用程序开始时读取索引,然后您可以快速跳转到文件中的该记录。谢谢,但是这种在每条记录之前写入字节数的方法确实提供了索引的优势。假设,如果我需要取第512条记录。我不是直接跳过n个字节来获取记录,而是必须先获取该记录的大小,然后跳过bytesTrue的数量,但是您可以将记录大小存储在内存中,或者更具体地说,存储获取rec1(0字节)、rec2(rec1.length)、rec3(rec1.length+rec2.length)所需的字节数,等等。虽然您仍然需要将其存储在内存中,但您只为每个记录存储一个int(或long),而不是整个记录。此外,我假设每个记录的大小不是恒定的。如果是的话,那么你知道这只是重新长度*(recNum-1)你的意思是说将索引存储为一个单独的文件,并使用它从原始文件或其他文件中读取内容?我的意思是在记录之前将索引存储在文件中,然后在应用程序开始时读取索引,然后你可以快速跳转到文件中的记录,这有点像填字游戏,我从1000个问题中随机选取10个问题-答案对,然后创建这个游戏。由于这是一个独立的游戏,因此不能选择通过网络。因此,生成这十条随机记录并涉过这条流是没有效率的,加载所有这一千条记录也是没有效率的。因此,我试图找到一个两全其美的解决方案。这有点像填字游戏,我随机挑了10道题