如何在 java 中的文件中存储实现 org.apache.geode.pdx.PdxSerializable 的对象
How to store object implementing org.apache.geode.pdx.PdxSerializable in file in java
我有一个 class 实现 org.apache.geode.pdx.PdxSerializable
并且需要将它的对象存储在 java 中的文件中。为了存储在文件中,对象需要是 Serializable
但 class PDXSerializable 用于在 gemfire 中存储数据,因此我们不能使用 Serializable class.
为什么不使用自定义对象序列化?。这是我快速创建的示例;
private class Foo implements PdxSerializable {
private String bar;
private Integer baz;
public Foo(final String bar, final Integer baz) {
this.bar = bar;
this.baz = baz;
}
public String getBar() {
return bar;
}
public Integer getBaz() {
return baz;
}
public void toData(PdxWriter out) {
//your pdx stuff
}
public void fromData(PdxReader in) {
//your pdx work
}
}
//and a custom reader and writer
private void writeCustom(final Foo foo, final Path path) throws IOException {
try(ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(path.toFile()))) {
objectOutputStream.writeChars(foo.getBar());
objectOutputStream.writeInt(foo.getBaz());
}
}
private Foo readCustom(final Path path) throws IOException {
try(ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(path.toFile()))) {
String bar = objectInputStream.readUTF();
Integer baz = objectInputStream.readInt();
return new Foo(bar, baz);
}
}
自定义序列化 Oracle 文档 - https://www.oracle.com/technetwork/articles/java/javaserial-1536170.html
一个类似的问题,答案很好 - Java Custom Serialization
您可能想看看 JSONFormatter:
http://gemfire-95-javadocs.docs.pivotal.io/org/apache/geode/pdx/JSONFormatter.html
它有一个将 PDXInstance 转换为 JSON 字符串的静态方法。
假设数据在 GemFire 中,然后将其作为 PDXInstance 导出,只需要您编写一个简单的客户端并将 "pdx-read-serialized" 设置为 true。使用该设置,当您的客户端调用 get 或 getAll 时,返回的对象将是 PDXInstances,您可以使用 JSONFormatter 将它们直接转换为 JSON。
我有一个 class 实现 org.apache.geode.pdx.PdxSerializable
并且需要将它的对象存储在 java 中的文件中。为了存储在文件中,对象需要是 Serializable
但 class PDXSerializable 用于在 gemfire 中存储数据,因此我们不能使用 Serializable class.
为什么不使用自定义对象序列化?。这是我快速创建的示例;
private class Foo implements PdxSerializable {
private String bar;
private Integer baz;
public Foo(final String bar, final Integer baz) {
this.bar = bar;
this.baz = baz;
}
public String getBar() {
return bar;
}
public Integer getBaz() {
return baz;
}
public void toData(PdxWriter out) {
//your pdx stuff
}
public void fromData(PdxReader in) {
//your pdx work
}
}
//and a custom reader and writer
private void writeCustom(final Foo foo, final Path path) throws IOException {
try(ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(path.toFile()))) {
objectOutputStream.writeChars(foo.getBar());
objectOutputStream.writeInt(foo.getBaz());
}
}
private Foo readCustom(final Path path) throws IOException {
try(ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(path.toFile()))) {
String bar = objectInputStream.readUTF();
Integer baz = objectInputStream.readInt();
return new Foo(bar, baz);
}
}
自定义序列化 Oracle 文档 - https://www.oracle.com/technetwork/articles/java/javaserial-1536170.html
一个类似的问题,答案很好 - Java Custom Serialization
您可能想看看 JSONFormatter:
http://gemfire-95-javadocs.docs.pivotal.io/org/apache/geode/pdx/JSONFormatter.html
它有一个将 PDXInstance 转换为 JSON 字符串的静态方法。
假设数据在 GemFire 中,然后将其作为 PDXInstance 导出,只需要您编写一个简单的客户端并将 "pdx-read-serialized" 设置为 true。使用该设置,当您的客户端调用 get 或 getAll 时,返回的对象将是 PDXInstances,您可以使用 JSONFormatter 将它们直接转换为 JSON。