我正在研究一个小型服务器客户端应用程序,服务器位于计算机上,客户端位于Android设备上。在某些时候,我希望设备检查它所拥有的图像是否是最新的并使用尽可能少的数据,因此我编写了一些代码来创建图像的校验和,这样可以使客户更容易确定它的图片是否是最新的。
(我打算发送代码,但这很长,所以我先试试)
在伪代码中:
long getCheckSumFor(Image i) {
long xVal;
long yVal;
count x from 0 to i.width
long val = 0;
count y from 0 to i.height
val += i.getPixel(x, y);
yVal += val % Integer.MAX_VALUE;
count y from 0 to i.height
long val = 0;
count x from 0 to i.width
val += i.getPixel(x, y);
xVal += val % Integer.MAX_VALUE;
int tx = xVal % Integer.MAX_VALUE;
int ty = yVal % Integer.MAX_VALUE;
return a long with the first 4 bytes taken from ty and the last 4 bytes taken from tx
}
这基本上是它的工作原理,但它为相同的输入提供不同的输出(取决于哪个平台,PC或Android)。
我在PC上使用ImageIO.read()
和BitmapFactory.decodeByteArray()
(没有BitmapFactory.Options)来读取图片,调试显示yVal已经因平台而异,所以我猜每个方法的读取方式可能略有不同一个JPEG?如果这是真的,我有什么办法以同样的方式阅读它们吗?
提前谢谢,
谢尔顿
答案 0 :(得分:1)
如果您使用MD5怎么办?您可以在Java http://dojo.telerik.com/@Stephen/iKiCI和Android here
中执行此操作答案 1 :(得分:1)
不要使用Bitmap, BufferedImage or BitmapFactory
!
只需获取图像文件的字节即可计算校验和。
如果发送文件,则发送文件的字节,不要使用任何转换文件字节的类。
不在发送方。不在接收方。