gpt4 book ai didi

java,ByteBuffer从文件中解析数据

转载 作者:行者123 更新时间:2023-12-02 00:46:19 27 4
gpt4 key购买 nike

在java中,我想快速解析包含异构数据(数字和字符)的文件。

我一直在阅读有关 ByteBuffer 的内容和内存映射文件。

我可以复制它,但是解析数据时它变得很棘手。我想分配各种字节。但它变得依赖于编码?

如果文件的格式是,例如:

someString 8<br/>
some other string 88

如何将其解析为StringInteger对象?

谢谢!

乌多。

最佳答案

假设您的格式类似于

{string possibly with spaces} {integer}\r?\n

您需要搜索换行符,然后向后查找,直到找到第一个空格。您可以自己解码该数字并将其转换为 int 或将其转换为 String 并解析它。除非必要,否则我不会使用 Integer。现在您知道行的开头在哪里以及整数的开头,您可以将字符串提取为字节并使用所需的编码将其转换为字符串。

这假设换行符和空格是编码中的一个字节。如果是多字节的话那就更复杂了还是可以的。

编辑:以下示例打印...

text: ' someString', number: 8
text: 'some other string', number: -88

代码

ByteBuffer bb = ByteBuffer.wrap(" someString 8\r\nsome other string -88\n".getBytes());
while(bb.remaining()>0) {
int start = bb.position(),end, ptr;
for(end = start;end < bb.limit();end++) {
byte b = bb.get(end);
if (b == '\r' || b == '\n')
break;
}
// read the number backwards
long value = 0;
long tens = 1;
for(ptr = end-1;ptr>= start;ptr--) {
byte b = bb.get(ptr);
if (b >= '0' && b <= '9') {
value += tens * (b - '0');
tens *= 10;
} else if (b == '-') {
value = -value;
ptr--;
break;
} else {
break;
}
}
// assume separator is a space....
byte[] bytes = new byte[ptr-start];
bb.get(bytes);
String text = new String(bytes, "UTF-8");
System.out.println("text: '"+text+"', number: "+value);

// find the end of the line.
if (bb.get(end) == '\r') end++;
bb.position(end+1);
}

关于java,ByteBuffer从文件中解析数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4937752/

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