gpt4 book ai didi

java - 对象属性为相同长度的表示以加快阅读速度

转载 作者:行者123 更新时间:2023-11-29 06:14:00 27 4
gpt4 key购买 nike

我想将我的“人”对象的属性转换为一种表示形式,我可以在其中将行写入代表每个人的文件。许多机器需要同时读取它们分配的文件 block ,因此我正在从字符编码文本行移动到字节列表。我希望每个人的表示都是相同长度,我不必阅读每个字符,阅读应用程序可以“跳转”到需要开始阅读的地方。

这就是我到目前为止所写的,获取对象的属性并将它们放入长度始终相同的形式中。我可以这样做吗?我修改了这段代码,只是为了创建字符串表示和连接这些字符串。

我也不确定我转换 boolean 值的方法是否必要/正确。

byte[] person = new byte[8];
person[0] = Integer.byteValue(age);
if (gender.equals('m')) {person[1] = Integer.byteValue(1);}
else {person[1] = Integer.byteValue(0);}
person[2] = Integer.byteValue(children);
person[3] = Integer.byteValue(goodHealth? 1:0);
person[4] = Integer.byteValue(cars);
person[5] = Integer.byteValue(avgWeekShopping);
person[6] = Integer.byteValue(salary);
person[7] = Integer.byteValue(smoker? 1:0);

希望它能理解我正在努力实现的目标。干杯。

最佳答案

详细说明@trashgod 的回答,您的问题可以分为两部分;对数据进行编码,并确保编码后的数据可以在相同长度的记录中表示。

编码数据的明显方式如下:

byte[] bytes;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream(/* size hint */);
DataOutputStream dos = new DataOutputStream(baos);
dos.writeInt(age);
dos.writeBoolean(gender.equals('m'));
dos.writeInt(children);
dos.writeBoolean(goodHealth);
dos.writeInt(cars);
dos.writeInt(avgWeekShopping);
dos.writeInt(salary);
dos.writeBoolean(smoker);
bytes = baos.toByteArray();
} catch (IOException ex) {
throw new AssertionError("this can't happen", ex);
}

如果您有固定数量的原始类型字段,则编码后的字节数组将具有固定大小。

如果您有可变数量的字段或可变长度的字符串,那么编码字节数组的大小将是可变的。要处理这个问题,您需要选择一些最大记录大小,并将所有编码字节数组填充到该大小。


话虽如此,如果您使用数据库而不是尝试自己进行文件管理,您可能会获得更好的整体结果。如果您的应用程序需要搜索记录,则尤其如此。

关于java - 对象属性为相同长度的表示以加快阅读速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5783393/

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