gpt4 book ai didi

java - 从使用 .net 编写的文件中读取字符

转载 作者:行者123 更新时间:2023-11-30 09:46:02 25 4
gpt4 key购买 nike

我正在尝试使用 java 从使用 .net binaryWriter 编写的文件中读取字符串。

我认为问题在于 .net 二进制编写器为其字符串使用了某种 7 位格式。通过在线研究,我发现这段代码的功能应该类似于二进制读取器的 readString() 方法。这是在我的扩展 DataInputStream 的 CSDataInputStream 类中。

public String readStringCS()  throws IOException {
int stringLength = 0;
boolean stringLengthParsed = false;
int step = 0;
while(!stringLengthParsed) {
byte part = readByte();
stringLengthParsed = (((int)part >> 7) == 0);
int partCutter = part & 127;
part = (byte)partCutter;
int toAdd = (int)part << (step*7);
stringLength += toAdd;
step++;
}
char[] chars = new char[stringLength];
for(int i = 0; i < stringLength; i++) {
chars[i] = readChar();
}
return new String(chars);
}

第一部分似乎有效,因为它返回了正确数量的字符 (7)。但是当它读取字符时,它们都是中文!我很确定问题出在 DataInputStream.readChar() 但我不知道为什么它不起作用......我什至尝试过使用

Character.reverseBytes(readChar());

读取字符以查看是否可行,但它只会返回不同的汉字。

也许我需要模仿 .net 读取字符的方式?我该怎么做?

还有什么我想念的吗?

谢谢。

最佳答案

好的,您已经通过发音正确地解析了长度 - 但您随后将其视为以字符为单位的长度。据我从文档中得知,它的长度是字节

所以你应该把数据读入一个合适长度的byte[],然后使用:

return new String(bytes, encoding);

其中 encoding 是基于从 .NET 编写的任何内容的适当编码...它将默认为 UTF-8,但可以将其指定为其他内容。

顺便说一句,我个人不会扩展DataInputStream - 我会编写它,即让你的类型或方法获取一个DataInputStream(或者可能只是获取InputStream并将其包装在一个DataInputStream中)。一般来说,根据我的经验,如果您更喜欢组合而不是继承,它可以使代码更清晰、更易于维护。

关于java - 从使用 .net 编写的文件中读取字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7346809/

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