Java如何从randomaccessfile中读取字符串?

标签 java string byte randomaccessfile

我有一个存储名称、地址、城市、州和邮政编码的随机访问文件。

它们都是文件中固定大小的字节(每个条目)。我如何从文件中读取名称、街道等每个项目的字符串?

我已经尝试过

 string name = raf.readUTF(); 

但是我无法控制它读取的字节数会阻止它正常工作吗?或者,由于争论中无法提供要读取的总字节数,因此 readUTF 究竟如何工作?

或者是更好的方法

 ENTRY1_SIZE = 32;
 raf.read(string1);
 raf.skipBytes(ENTRY1_SIZE - string1.size());
 raf.read(string2);

诸如此类。

在仍然使用随机访问文件的情况下,最有效的方法是什么? 基本上我想知道如何将 N 个字节读入一个稍后可以在文本框中显示的字符串。

<小时/>

对以下答案的回应。 我试过你的方法

        long position = 91;
        byte[] b = new byte[32];
        try{
        raf.seek(position);
        raf.readFully(b, position, 32);
        String name = (b, StandardCharsets.UTF_8);

但是这个错误:RandomAccessFile 类型中的方法 readFully(byte[], int, int) 不适用于参数 (byte[], long, int)

应该为中间参数提供什么?当前文件指针很长,因此也不起作用。

另一个错误:StandardCharsets 无法解析或不是字段

最佳答案

javadoc有你的答案。 readUTF 仅适用于之前使用 writeUTF 写入文件的字符串。如果您的文件具有固定长度区域,则应使用 readfully(byte[])使用适当大小的字节数组,然后使用 new String(bytes, StandardCharsets.UTF_8) 将字节数组转换为字符串。

关于Java如何从randomaccessfile中读取字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33780798/

相关文章:

java - 从 keystore 加载证书

c# - 如何删除字符串中的\n?

javascript - javascript onkeypress问题在文本框中仅输入数字

java - java中的字节数组

java - 在java中的字节流上创建滚动窗口

java - 相当于00000000字节的字符是什么?

java - 如何用方向键移动矩形?

java - 使用 MyBatis 将数据从数据库映射到 Java Rest Web 服务中的 JSON

java - 带有 JDBC 的 Android。 createStatement() 不存在?

C代码计算一个单词中有多少个字母