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

时间:2013-06-25 07:14:32

标签: java optimization bytearray

我想知道如何在java中优化以下内容。我希望在Android手机上使用内存越少越好。

我得到一个包含一列的记录集,该列保存字节数组中的二进制数据。这是我从未玩过的东西。

二进制数据中的信息结构可以在这里找到:BLOB

我想跳过SRID和MBR,但我想要ENDIAN,CLASS TYPE和实际的几何数据。

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

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();

最后,这些形状将直接放到渲染器上,所以我不需要在内存中保留任何内容。这已经超越了我自己,但可能会对你有用,看看我最终会如何使用它。

1 个答案:

答案 0 :(得分:0)

我认为不可能预测“最快的方式”是什么。但是,这可能不应该是您成功的主要标准。

您实际需要的是应用程序,其运行速度足够。在此上下文中,应用程序性能包括执行数据库查询所花费的时间,并将结果提取到Java堆中。 (或者从文件中读取它......)

所以我建议采用以下方法:

  1. 简单地写下来。
  2. 编写单元测试。
  3. 使用单元测试彻底测试并更正任何错误。
  4. 创建可用于衡量代码当前速度的基准/样本数据。
  5. 在代码上运行基准测试。
  6. 足够快吗?如果是,则停止。
  7. 分析代码以确定瓶颈所在:
    • 如果瓶颈在数据库中,请继续优化数据库架构和查询......
    • 如果瓶颈在Java端,请继续优化。
  8. 转到第3步......看看你的“优化”是否有帮助。
  9. 通常,只需优化代码/实现的区域是瓶颈。虽然有例外(即真正有天赋的程序员),但大多数开发人员对真正的瓶颈所处的位置并没有特别准确的直觉。如果您知道某个特定代码区域是瓶颈,那么风险就会花费很多时间来优化它。