May 2nd, 2008

基于Huffman编码译码的文件压缩器

最开始是两个周之前帮同学写的一个小工具,一直没有完善和收尾,趁这次五一假期,终于弄了出来。开始时同学的要求是基于二进制Huffman编码,对bmp图片进行译码、解码,从而实现压缩和解压缩的功能。我在写的过程中对这份要求进行了大大的扩展,已经能够实现对任意大小(内存等硬件限制除外)的文件,并且任意格式的文件而不只限于bmp文件,进行压缩、解压缩。界面如下:

huffman-encode-decode

开发工具选的是Java,后来才感受到,如果换成c或者c++来写,在存储时,大概会省去许多麻烦。因为,Java毕竟是擅长开发一些比较大的应用的,对于比较底层的二进制位存储,是不支持的,只有自己花了点时间写了一个字节缓冲,来实现二进制存储。

Read the rest of this entry »

Tags: , , , , ,

April 9th, 2008

Java实验小结

一个看起来并不怎么困难的小项目,结果花去了我总共大概50个小时左右的时间,记录一下写代码时的所感所想,以备后鉴。

首先,对于一门刚刚接手的语言,给我最大的学习助手除了google,还是google。相比较而言,我并不觉得那本被传的神乎其神的《Thinking in Java》比Google更优秀。当然,这句话的前提是针对“刚刚接手Java的初学者”,并且,我的意思是,与其总是单纯显耀自己手中有一本厚厚的经典之著而只翻看前面的简介几页,还不如务实的用Google多查几个实例认真研究一下。所以,谢谢你,Google。

然后,当一个客户(老师)提出的需求是一种模糊性的方向性需求,并且尽可能给你发挥的空间的时候,那么你就可以充分利用这个可以发挥的空间,进行想象、进行实现。我发现同学们之间各个最终成果的差距就是,除了代码实现的能力些许不同以外,更大的差距在于,你是不是能想象得到某种实现,你的视野是不是很开阔。比如,在存储结构中,既然我能用xml,为什么还要用c语言擅长的文本流?不是怕做不到,就怕想象不到。

项目的框架搭建和细节撰写同样重要。例如,整个项目如果能用多个有不同意义的java类来实现,并且界面操作和功能操作相分离,比只用一个庞大的java class,晕头转向的将滚动条拖来拖去要简洁明了的多,更重要的是,前者的做法远远提高了程序运行的时间和空间效率。因为,我不必在一开始就将所有的类都实例化成对象,仅仅这一点就大大降低了内存占用率。

注重用户界面(UI)和用户体验(UE)。对于开发者来说,应当把我们的用户都当作纯粹的傻瓜。这一点上,在Bingyan工作的经历给我相当大的帮助,每一个对用户友好的细节之处,也许都是最终结果赢得客户(老师)赞赏的原因之一。从模糊搜索、智能提示、到用户帮助文档,都是很容易考虑到的方面。

Read the rest of this entry »

Tags: