gpt4 book ai didi

java - 从java文件中随机读取一个字符?

转载 作者:行者123 更新时间:2023-12-02 05:31:51 25 4
gpt4 key购买 nike

当使用 RandomAccessFile 类中的 readChar() 读取文件时,会出现意外的输出。而不是所需的角色?显示。

package tesr;
import java.io.RandomAccessFile;
import java.io.IOException;

public class Test {

public static void main(String[] args) {
try{
RandomAccessFile f=new RandomAccessFile("c:\\ankit\\1.txt","rw");
f.seek(0);
System.out.println(f.readChar());
}
catch(IOException e){
System.out.println("dkndknf");
}
// TODO Auto-generated method stub

}

}

最佳答案

您可能想要readByte。 Java char 是 UTF-16BE,一种 2 字节的 Unicode 表示形式,并且在随机二进制数据上通常无法表示,没有正确的 UTF-16BE 或半“代理” - 形成一个 Unicode 代码点的两个 char 组合的一部分。 Java 在您的案例中将失败的转换表示为问号。

如果您知道文件采用什么编码,那么对于单字节编码来说很简单:

byte b = in.readByte();
byte[] bs = new byte[] { b };
String s = new String(bs, "Cp1252"); // Some single byte encoding

对于可变多字节 UTF-8,识别字节序列也很简单:

  • 高位 = 0 时为单字节
  • 否则高位为 10 时为连续字节
  • 否则为起始字节(有一些特殊情况),通过其高位来指示字节数。

对于 UTF-16LE 和 UTF-16BE,文件位置必须是 2 和 2 字节长的倍数。

byte[] bs = new byte[2];
in.read(bs);
String s = new String(bs, StandardCharsets.UTF_16LE);

关于java - 从java文件中随机读取一个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25455650/

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