【发布时间】:2022-10-14 21:29:25
【问题描述】:
我有一个长数字的读取代码,如下所示;
ByteArrayInputStream in;
public long readUInt64() throws IOException {
return readUInt16() | readUInt16() << 16L | readUInt16() << 32L | readUInt16() << 48L;
public int readUInt16() throws IOException {
return readWithEOF() | readWithEOF() << 8;
}
int readWithEOF() throws IOException {
int data = this.in.read();
if (data < 0)
throw new EOFException();
return data;
}
我有如下写文件;
ByteArrayOutputStream baos;
public void writeUInt64(Long val) {
writeUInt16((int) (val >> 0L));
writeUInt16((int) (val >> 16L));
writeUInt16((int) (val >> 32L));
writeUInt16((int) (val >> 48L));
}
public void writeUInt16(int num) {
baos.write(num >> 0);
baos.write(num >> 8);
}
当我尝试存储像 253402300799999L 这样的大值时,读取结果完全不同。对于小值,代码运行良好。 假设无法更改读取代码,我该如何解决此问题。 提前致谢。
【问题讨论】:
-
我试过 boas.write(num & 0xff) 但仍然返回 -769654785
-
检查所有“(int)(val >> 0L)”你是否得到一个整数溢出并创建一个负数?
标签: java