gpt4 book ai didi

java - 在 Java 中膨胀 byte[] 有问题吗?

转载 作者:可可西里 更新时间:2023-11-01 09:56:43 25 4
gpt4 key购买 nike

我遇到了一个我无法弄清楚的问题。这是问题的定义:我在 Db2/Linux 环境中的 Blob 列中有一些数据。在使用 JDK 压缩对 byte[] 进行压缩后,Blob 被写入 DB2(执行此操作的代码在 Linux 环境中运行)。我正在尝试编写一个简单的程序来读取其中一些数据解压缩(使用 JDK)并在 Windows 环境(我的开发环境)中从解压缩的字节数组创建一个字符串。问题是,在我解压缩 Blob (byte[]) 之后,解压缩字节数组的长度通常比预期长 1-3 个字节。我所说的预期是偏移量和长度字段也存储在数据库中。所以在这种情况下,解压后的字节数组的长度通常比数据库中存储的长度长,只有几个字节。因此,如果我从解压缩的字节数组创建一个 String 对象,并使用 substring(offset, length) 方法使用数据库中的偏移量和长度字段创建另一个 String 对象,我的第二个 String(我通过使用 substring 方法获得的那个)是更短。

一个例子是:数据库记录包含一个 blob,偏移量:0,长度:260,409解压 blob 后 -

 compressedByte[].length  - 71,212
decompressedByte[].length - 260,412
new String(decompressByte[]).length() - 260,412
new String(decompressByte[]).subString(0, 260,409).length() - 260409

对于其他一些输入记录,我看到的差异是长度在 1-3 个字节之间。

我对这个问题有点困惑,想知道是否有人可以提出任何提示,以便我可以做更多的调试来解决这个问题。我想知道这是否与 Linux 环境中字节的存储/写入方式以及它们在 Windows 中的读取方式有某种关系?感谢您的帮助。

最佳答案

我怀疑这两个系统的默认编码不同。

// on the linux box   
byte [] blob = str.getBytes("UTF-8");

// in your code
String str = new String(blob, "UTF-8");

或者至少找出 linux 机器上的默认编码是什么(普通 UTF-8)并跳过第 1 步。

Joel on software 上的一个很好的例子说明了这里可能发生的事情

关于java - 在 Java 中膨胀 byte[] 有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4616477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com