我想在将数据写入文件时节省空间。那就是我想将我的int数字仅存储为每个数字的半个字节(4位)。我不能将数字写成字符,因为每个数字需要花费一个字节(相应的ASCII码)如何将数字作为4位元素写入文件?
我正在使用以下代码来摆脱字节的前半部分并只写入4位:
String key= "1234567890"
char[] chars = key.toCharArray();
System.out.println(key+";");
dos.writeLong(l);
for (int i = 0 ; i < chars.length ; i+= 2) {
byte b1 = (byte) (chars[i] - (byte) '0');
byte b2 = (byte) (i < chars.length-1 ? chars[i+1] - (byte) '0': 0xf);
fos.write((byte) ((b1 << 4) | b2));
这个代码回读:
String encoded = stt.nextToken();
StringBuffer result = new StringBuffer();
byte[] buf = encoded.getBytes();
ByteArrayInputStream bais = new ByteArrayInputStream(buf);
for (int i = 0 ; i < 11 ; i++) {
byte both = (byte) bais.read();
byte b1 = (byte) ((both >> 4) & 0xf);
byte b2 = (byte) (both & 0xf) ;
result.append(Character.forDigit(b1, 10));
if (b2 != 0xf) {
result.append(Character.forDigit(b2,10));
}
}
它不工作。我怎么能改善这个?
您必须实现一个整数编码器。 – akappa
什么是“不起作用”的意思。请详细说明并更具体。任何错误消息?如果是的话,他们是什么? – vidstige
如果你想压缩你的输出,我建议使用已经可用的解决方案,比如gzip或者huffman编码。类似你的解决方案将会有很多工作和压缩可能比gzip差。 –