使用 Protocol Buffer 只读取一次 Issue 时存储多条记录

Store multiple records while reading only once Issue using Protocol Buffer

我正在使用协议缓冲区存储读取记录。 使用 writeDelimitedTo() 存储多条记录并使用 parseDelimitedFrom() 读取。

存储时,所有records/messages存储成功。

正在阅读,只有一个 record/message 来了。

不知道怎么回事?我是否以错误的方式或其他方式存储记录?不知道。

user.proto

option java_package = "main.java";
option java_outer_classname="ProtoUser";

message User {
   optional int32  id = 1;
   optional string name = 2;
   repeated Address addr = 3; 
   message Address {
   optional string city = 1;
   }
}

WriteFile.java

package com.io;
import java.io.FileOutputStream;
import main.java.ProtoUser;
import main.java.ProtoUser.User;

public class WriteFile {                   
     static User.Builder user = ProtoUser.User.newBuilder();
     static User.Address.Builder addr = ProtoUser.User.Address.newBuilder();
   public static void main(String[] args) throws Exception {
       FileOutputStream output = new FileOutputStream("user.data");
       user.setId(1)
       .setName("luisat")
       .addAddr(addr.setCity("Weston"));
       user.build().writeDelimitedTo(output);

       user.setId(2)
       .setName("nitin")
       .addAddr(addr.setCity("falna"));
       user.build().writeDelimitedTo(output);
       output.close();
    }
}

ReadFile.java

package com.io;
import java.io.FileInputStream;
import main.java.ProtoUser.User;

public class ReadFile {
     public static void main(String[] args) throws Exception {
        User user = User.parseDelimitedFrom( new FileInputStream("user.data") );
        System.out.println(user);
     }
}

要读取多条记录,需要多次调用parseDelimitedFrom

public class ReadFile {
  public static void main(String[] args) throws Exception {
    FileInputStream file = new FileInputStream("user.data");
    User user = User.parseDelimitedFrom(file);
    System.out.println(user);
    User user2 = User.parseDelimitedFrom(file);
    System.out.println(user2);
  }
}

请注意,当没有更多可用记录时,parseDelimiteFrom 将 return null