使用 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
。
我正在使用协议缓冲区来存储和读取记录。 使用 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
。