Tag: 序列化

在二进制流中搜索字符串(作为byte )

嗨团队,我试图在二进制文件中找到一个字符串“亨利”,并将字符串更改为不同的字符串。 FYI文件是对象序列化的输出。 原始问题在这里 我是新手搜索字节,想象这个代码会搜索我的byte []并交换它。 但它并没有接近工作它甚至找不到匹配。 { byte[] bytesHenry = new String(“Henry”).getBytes(); byte[] bytesSwap = new String(“Zsswd”).getBytes(); byte[] seekHenry = new byte[bytesHenry.length]; RandomAccessFile file = new RandomAccessFile(fileString,”rw”); long filePointer; while (seekHenry != null) { filePointer = file.getFilePointer(); file.readFully(seekHenry); if (bytesHenry == seekHenry) { file.seek(filePointer); file.write(bytesSwap); break; } } } 好的,我看到bytesHenry==seekHenry问题,并将交换到Arrays.equals( bytesHenry , seekHenry ) 我想每次读取5个字节时我需要移动-4个字节的位置。 […]

使用没有注释的@JsonIdentityInfo

我使用Jackson 2.2.3将POJO序列化为JSON。 然后我遇到了问题,我无法序列化递归结构……我通过使用@JsonIdentityInfo =>解决了这个问题。 但是,我不希望这个注释放在我的POJO之上。 所以我的问题是:是否还有其他可能设置我的ObjectMapper的默认行为来为每个POJO使用该function? 所以我想转换这个注释代码 @JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property=”@id”) 喜欢的东西 ObjectMapper om = new ObjectMapper(); om.setDefaultIdentityInfo(ObjectIdGenerators.IntSequenceGenerator.class, “@id”); 有任何想法吗?

用于Java的增量流式JSON库

任何人都可以推荐一个Java的JSON库,它允许我以非阻塞的方式提供数据块吗? 我已经阅读了一个更好的Java JSON库和类似的问题,并没有找到我想要的。 基本上,我想要的是一个库,它允许我做类似以下的事情: String jsonString1 = “{ \”A broken”; String jsonString2 = ” json object\” : true }”; JSONParser p = new JSONParser(…); p.parse(jsonString1); p.isComplete(); // returns false p.parse(jsonString2); p.isComplete(); // returns true Object o = p.getResult(); 请注意,实际的键名称(“A broken json object”)在各段之间分开。 我发现的最接近的是async-json-library , 几乎完全符合我的要求,除了它无法恢复实际字符串或其他数据值在片段之间分割的对象。

处理不再存在的枚举值的反序列化

我有一个包含3个值的枚举JJJ:A,B和C.在我的程序的先前版本中,它有一个额外的值:D。我希望能够读入由以前版本的创建的序列化对象程序,但遇到序列化对象中值为“D”的JJJ类型变量时抛出exception。 最理想的情况是,我希望能够拦截反序列化过程并告诉它在遇到它们时将D’映射到C’。 根据http://docs.oracle.com/javase/6/docs/platform/serialization/spec/serial-arch.html(Enum Constants的序列化),听起来有一种简单的方法可以做到这一点…我知道一种方法是在包含JJJ类型的成员变量的类上覆盖readObject,但由于程序的大小和范围,这将是困难和痛苦的(许多可序列化的类具有类型的成员变量) JJJ和重写readObject来处理JJJ字段意味着我必须手动处理所有其他字段。 我也尝试通过滚动我自己的ObjectInputStream子类来解决这个问题,但不幸的是,我真正需要的枚举反序列化位和覆盖来解决这个问题都是私有的或包私有的…… 有什么建议么?

序列化ArrayList

我正在尝试编写一款Android游戏,即使用户想要返回主菜单或活动被系统杀死,我也希望能够暂停游戏。 onSaveInstanceState似乎并没有给我一个很大的控制权,我什么时候可以读回包,再加上我能说的,这个包只能在很短的时间内使用。 所以我想序列化一些我拥有的ArrayLists,然后再读回来。 我没有得到任何编译错误,也没有程序崩溃。 但是,数据要么永远不会被写入,要么永远不会被读取。 我不确定是哪一个。 我在onDestroy中调用了serializeData方法,并从onCreate调用了deserializeData。 这是我编写和读取数据的代码: public void serializeData(String filename, ArrayListarrayList) { FileOutputStream fos; try { fos = openFileOutput(filename, Context.MODE_PRIVATE); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(arrayList); oos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); } } @SuppressWarnings(“unchecked”) private void deserializeData(String filename, ArrayListarrayList){ try{ FileInputStream fis = openFileInput(filename); ObjectInputStream ois = new […]

使用Jackson进行不对称序列化和反序列化

我正在使用Jackson为RESTful API序列化和反序列化数据。 我想要一个REST资源( /comments ),它允许POST注释以及获取注释列表。 这是发布到/comments的内容的(简化)示例。 {“text”:”Text”,”author”:”Paul”,”email”:”paul@example.org”} 以下是GET /comments的结果: [{“text”:”Text”,”author”:”Paul”,”emailHash”:”76w0kjKP9HpsdhBjx895Sg==”}] 由于任何人都不应该看到电子邮件地址,因此我决定只返回响应中电子邮件地址的MD5哈希值。 我创建了一个简单的POJO类Comment ,其中包含用于text , author , email和email emailHash getter和setter的字段。 现在,当我序列化结果时,我得到的是以下内容: [{“text”:”Text”,”author”:”Paul”,”email”:null,”emailHash”:”76w0kjKP9HpsdhBjx895Sg==”}] 但我真的不喜欢email在这里返回null 。 它根本不应该被包括在内。 在该字段上使用注释@JsonIgnore也将在反序列化时忽略它。 我是否必须创建两个类,例如CreationComment和ResultComment以及一个共享公共字段的超类Comment ,或者是否有一种方法可以避免创建其他类?

反序列化MongoDB BSON

我试图从REST服务中获取响应,该服务查询MongoDB的实例并将响应解析为Java对象。 Web服务返回MIME类型为html的响应,并使用换行符分隔返回的每个记录(尽管我可以调整服务返回的内容)。 将BSON响应转换为Java对象的最简单/最有效的方法是什么? 我已经用Java创建了一个模板类来存储数据。 提前致谢! 编辑:一位同事建议我在webservice本身使用MongoDB Java驱动程序的BSON解析实用程序,然后返回一个格式良好的HTML字符串。 这仍然让我在我的应用程序中进行解析,但暂时将作为一种解决方法。 仍在寻找一种方法来轻松反序列化对Java对象的BSON响应。

Spring Boot忽略@JsonDeserialize和@JsonSerialize

我有一个带有RESTful端点的Spring Boot应用程序,我想为joda-time添加自定义序列化程序,但我无法让应用程序默认Jackson serailzier识别我的自定义端口。 我使用@RepositoryRestResource创建了RESTFul端点 @RepositoryRestResource(collectionResourceRel = “x”, path = “x”) public interface XRepository extends PagingAndSortingRepository { } 然后我有一个GET调用来返回所有对象X: HTTP://本地主机:8181 / X 这是我的序列化器: @Component public class JsonDateSerializer extends JsonSerializer { private static DateTimeFormatter formatter = DateTimeFormat.forPattern(“dd/MM/yyyy”); @Override public void serialize(DateTime value, JsonGenerator gen, SerializerProvider arg2) throws IOException, JsonProcessingException { gen.writeString(formatter.print(value)); } } 我将它添加到属性Getter,如下所示: @JsonSerialize(using=JsonDateSerializer.class) public DateTime […]

jackson:无法反序列化START_OBJECT令牌中的Number实例

我的GWT服务返回LinkedList 。 这是VisualData外观: import javax.xml.bind.annotation.XmlRootElement; import com.google.gwt.user.client.rpc.IsSerializable; @XmlRootElement public class VisualData implements IsSerializable { private Number value; private long timestamp; public VisualData() { } public VisualData(Number value, long timestamp) { this.value = value; this.timestamp = timestamp; } public long getTimestamp() { return timestamp; } public Number getValue() { return value; } public void setTimestamp(long timestamp) […]

使用outputstream序列化对象

假设我有一个OutputStream ( 而不是 ObjectOutputStream )。 是否可以使用write方法发送序列化对象? 谢谢!