如何在Java中以最优化的方式处理此二进制文件

如何在Java中以最优化的方式处理此二进制文件,java,optimization,bytearray,Java,Optimization,Bytearray,我想知道如何在java中优化以下内容。我希望它能在安卓手机上运行,这样内存越少越好 我得到一个由一列组成的记录集,该列以字节数组的形式保存二进制数据。这是我从未玩过的东西 二进制数据中的信息结构可在此处找到: 我想跳过SRID和MBR,但我想要ENDIAN、类类型和实际的几何体数据 在这个问题中,几何数据的实际处理并不重要,更多的是如何获取数据以及如何快速获取数据 Stmt stmt = local_db.prepare("Select geometry From Parcel"); while

我想知道如何在java中优化以下内容。我希望它能在安卓手机上运行,这样内存越少越好

我得到一个由一列组成的记录集,该列以字节数组的形式保存二进制数据。这是我从未玩过的东西

二进制数据中的信息结构可在此处找到:

我想跳过SRID和MBR,但我想要ENDIAN、类类型和实际的几何体数据

在这个问题中,几何数据的实际处理并不重要,更多的是如何获取数据以及如何快速获取数据

Stmt stmt = local_db.prepare("Select geometry From Parcel");
while (stmt.step()){
    //stmt.column_bytes(0) holds the byte array
    //this could be used with a ByteArrayInputStream or perhaps a ByteBuffer
    //maybe something else, what ever would be faster??
    //
    //Next would be the proccessing of the byte array to get the values out.
    //Switch (ENDIAN){
    //  case 0 :
    //    
    //  break;
    //  default:
    //     
    //}
}
stmt.close();

最后,这些形状将直接放入渲染器,因此我不需要在内存中保留任何内容。这已经超出了我的能力范围,但是你可以看看我最终将如何使用它。

我不认为有可能预测“最快可能的方法”是什么。然而,这可能不应该成为你成功的主要标准

您实际需要的是一个运行速度足够快的应用程序。在这种情况下,应用程序性能包括执行数据库查询和将结果获取到Java堆所需的时间。(或从文件中读取…)

因此,我推荐以下方法:

  • 写得简单
  • 编写单元测试
  • 使用单元测试对其进行彻底测试,并纠正任何错误
  • 创建一个基准/示例数据,用于测量代码当前的速度
  • 在代码上运行基准测试
  • 够快吗?如果是,则停止
  • 分析代码以确定瓶颈位置:
    • 如果瓶颈在数据库中,请努力优化数据库模式和查询
    • 如果瓶颈在Java端,那么就着手优化它
  • 转到第三步。。。看看你的“优化”是否有帮助

  • 一般来说,只值得优化代码/实现中的瓶颈区域。虽然也有例外(即真正有天赋的程序员),但大多数开发人员对真正的瓶颈所在并没有特别准确的直觉。如果您不知道某个特定的代码区域是一个瓶颈,那么在优化它时所花费的精力可能会浪费时间

    我怀疑无论你做什么,它都不会像使用数据库那么慢,所以我会尽可能简单。嗨,彼得,对不起,但我不确定我明白你的意思??你是说它在使用数据库时总是很慢吗?上面的查询返回17000个REC并循环使用它们,在大约260毫秒内没有处理,这很好。当涉及到处理字节数组时,它可以转化为秒。好的,我明白所有这些。我想第一个问题是开始处理数据,难道你不知道如何根据上述标准开始处理吗?@Hank-如果你真的理解我说的话,那么你会意识到答案是“不”。概念很好。我应该用更好的措辞。我说的是如何根据内部BLOB规范从字节数组中读取数据。我要再说一遍。写得简单。很可能,“简单”和“最优”之间的差异不会对整体产生太大影响。因为字节级处理可能不是瓶颈。你只回答了一半的问题,但我非常感谢你的时间。