`
isiqi
  • 浏览: 16033104 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

从j2me polish感受开源代码

阅读更多

2009/12/30 16:02:43
最近再被molebox折磨时,发现里面使用了zlib压缩,不得已,决定再补补zlib压缩的知识。听说j2me polish里面有个zip压缩类,所以就看了下源代码,竟然发现他在生成huffman树的深度过程中处理溢出时,竟然有错误。晕倒,不是网上老说Open Sourse的错误会更快的被发现和纠正,咋现在版本都2.07了,还有错误啊。国内j2me polish感觉用的挺火的,难道手机上就没人用过ZIP这部分功能。感觉网上谈到开源代码时,都是说有很多人帮着修复bug.我在想像很多开源项目Freebsd, linux, GCC的代码究竟有几个人真的懂,又有多少人去读。可能很多开源代码对我们的意义只剩下另一点,如果有bug,因为有代码我们可以自己修复。
下面为存在问题的代码(de.enough.polish.util.zip.ZipHelper类的genTreeLength方法中):
// check for overflow
int overflowCount=0;
for (int i = 0; i < huffmanCodeLength.length; i++) {
if (huffmanCodeLength[i]>max_len) {
overflowCount++;
}
}
// fix the overflow
if (overflowCount!=0){
//#debug
System.out.println(" fixing " + overflowCount + " overflows because of max=" + max_len);

// list the overflows
short overflows[]= new short[overflowCount];
overflowCount=0;
for (short i = 0; i < huffmanCodeLength.length; i++) {
if (huffmanCodeLength[i]>max_len) {
overflows[overflowCount++]=i;
}
}
// find the index of the smalest node
int minNode=0;
for (int i = 0; i < huffmanCodeLength.length; i++) {
if (huffmanCodeLength[i]!=0 && huffmanCodeLength[minNode]>huffmanCodeLength[i]){
minNode=i;
}
}

// ok lets go and fix it....
int exendableNode;
int overflow1, overflow2;
while(overflowCount!=0){
exendableNode=minNode;
// find the largest expandable length
for (int i = 0; i < huffmanCodeLength.length; i++) {
if(huffmanCodeLength[i]<max_len && huffmanCodeLength[exendableNode]<huffmanCodeLength[i]){
exendableNode=i;
}
}

// find the deepest two overflows
overflow1=0;
overflow2=0;
for (int i = 0; i < overflows.length; i++) {
if(huffmanCodeLength[overflows[i]]> huffmanCodeLength[overflow1]){
overflow1=overflows[i];

} else if(huffmanCodeLength[overflows[i]]== huffmanCodeLength[overflow1]) {
overflow2=overflows[i];
}
}

// insert one of them at the best exendableNode
huffmanCodeLength[exendableNode]++;
huffmanCodeLength[overflow1]=huffmanCodeLength[exendableNode];

// lift the other one
huffmanCodeLength[overflow2]--;

// refresh the overflow count
overflowCount--;
if (huffmanCodeLength[overflow2]==max_len){
overflowCount--;
}
}
}
红色部分为有问题的部分。overflow2的值应该为第二最大溢出值。
给j2mepolish@enough.de发了封邮件,也算为开源做了点贡献。只是不知问题能不能被修复。

分享到:
评论

相关推荐

    pro j2me polish

    j2me polish 资料 j2me polish 资料 j2me polish 资料 j2me polish 资料

    j2me polish v212源码

    j2me polish v212完全源码

    J2ME Polish-开源

    J2ME Polish是用于快速开发J2ME应用程序的下一代框架。 包括的功能包括强大的GUI框架,实用程序类和用于创建设备优化应用程序的基于ant的构建工具。

    j2me polish 入门教材

    j2me polish 入门教材

    《J2ME Polish 初级教程》中文 PD

    现在好了,开源工具J2ME Polish 提供了针对这个问题的解决方案,事实上J2ME Polish为无线JAVA程序开发人员提供了一整套的工具。这些覆盖用于编译、预审核和打包程序的标准的工具,精致的可选GUI使你能通过一个简单的...

    J2ME Polish 初级教程

    J2ME Polish 初级教程,介绍了polish的基本知识,。。。

    MCRM.rar_j2me_j2me Polish_mcrm_polish_管理系统

    j2me polish 开发的一个移动客户关系管理系统(手机端)。

    如何真正配置J2ME POLISH

    网上对于ECLIPSE和J2ME POLISH集成的文章有一些,但是随着版本的不断升级,初学者很难顺利集成,我花了一天时间终于集成成功。

    pro j2me polish 源码

    Pro_J2ME_Polish_Open_Source_Wireless_Java_Tools_Suite-2209

    使用J2ME Polish进行游戏编程

    在这篇文章中,是从Robert Virkus的 Pro J2ME Polish 摘录的。你将学会通过设置各种预处理变量从而优化游戏引擎;在MIDP1.0平台游戏引擎受限的条件下开发以及通过使用低级图形操作、声音重放和设备控制的厂家特殊库...

    Pro J2ME Polish Open Source Wireless Java Tools Suite(普通下载).rar

    Pro J2ME Polish Open Source Wireless Java Tools Suite(普通下载).rar

    j2me polish css

    j2me polish cssj2me polish cssj2me polish cssj2me polish cssj2me polish cssj2me polish cssj2me polish cssj2me polish cssj2me polish css

    J2ME Polish学习资料

    2ME Polish 是用于开发J2ME应用的工具集: 从一份源代码中为多种设备和多种语言创建应用的建造工具(build tools)。 一个设备数据库,您的应用可以用它通过预处理为不同的手机进行调整. 一套用户界面(GUI), 可以在...

    J2ME polish 相关资料

    j2me 界面库,方便各种机型迁移.包内内容为自带文档..

    分享:J2ME游戏代码(代码已经初级优化)

    分享:J2ME游戏代码 分享:J2ME游戏代码 分享:J2ME游戏代码分享:J2ME游戏代码 分享:J2ME游戏代码 分享:J2ME游戏代码分享:J2ME游戏代码 分享:J2ME游戏代码 分享:J2ME游戏代码分享:J2ME游戏代码 分享:J2ME...

    J2me赤血英豪源代码(6种机型)

    J2me赤血英豪源代码(6种机型)J2me赤血英豪源代码(6种机型)

    J2me太空英雄源代码

    J2me太空英雄源代码J2me太空英雄源代码J2me太空英雄源代码J2me太空英雄源代码J2me太空英雄源代码J2me太空英雄源代码J2me太空英雄源代码J2me太空英雄源代码

    基于java的开发源码-简单模拟的J2ME潜艇大战源代码.zip

    基于java的开发源码-简单模拟的J2ME潜艇大战源代码.zip 基于java的开发源码-简单模拟的J2ME潜艇大战源代码.zip 基于java的开发源码-简单模拟的J2ME潜艇大战源代码.zip 基于java的开发源码-简单模拟的J2ME潜艇大战源...

    j2me开发大全源代码.zip

    j2me开发大全源代码.zip

Global site tag (gtag.js) - Google Analytics