Serializable - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Serializable (/thread-31053.html) |
Serializable - JarredAwesome - Nov-19-2020 Hey everyone, I am working on making a custom controller for a BLE device using a rasp-pi and python. The app that comes with my BLE device is written for an android device. I was able to find the source code, but It's all in java, which I don't know. and honestly I don't want to learn just for this one project. The One hold up I am having is trying to replicate a timecode. Here is the timecode sent by the app to the device: 545f0d31574d5256595f4a7013 I am fairly certain it's a standard unix timestamp that has been run though Gson and Serializable. Is there any way to decode/re-code in python? I can probably get the class's UID Thanks RE: Serializable - Larz60+ - Nov-19-2020 I'm not sure what that timecode is. Standard python timestamp looks more like: 1605825093.330983 RE: Serializable - JarredAwesome - Nov-19-2020 (Nov-19-2020, 10:32 PM)Larz60+ Wrote: I'm not sure what that timecode is. I know! its kinda crazy. But I believe the first 4 numbers aren't part of the code. so its just "0d31574d5256595f4a7013", I'm pretty sure it's been serialized and ended using java's Serializable. RE: Serializable - bowlofred - Nov-19-2020 I think you'll need more information on how it was created. I tried running it though the javaobj-py3 decoder (both with and without the first 4 bytes) and it didn't decode it either way. RE: Serializable - JarredAwesome - Nov-19-2020 (Nov-19-2020, 11:36 PM)bowlofred Wrote: I think you'll need more information on how it was created. I tried running it though the javaobj-py3 decoder (both with and without the first 4 bytes) and it didn't decode it either way. What more do you need? I am not relly fluent with Java or serialization. I think I found the code that converts it, but java seems to be a little more complicated than anything I have programmed before. It looks like it's all functions, and no code that seem to call it. Here is the code I believe creates the time code package com.google.gson; import com.google.gson.internal.C$Gson$Preconditions; import com.google.gson.internal.Excluder; import com.google.gson.internal.bind.TreeTypeAdapter; import com.google.gson.internal.bind.TypeAdapters; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; public final class GsonBuilder { private boolean complexMapKeySerialization = false; private String datePattern; private int dateStyle = 2; private boolean escapeHtmlChars = true; private Excluder excluder = Excluder.DEFAULT; private final List<TypeAdapterFactory> factories = new ArrayList(); private FieldNamingStrategy fieldNamingPolicy = FieldNamingPolicy.IDENTITY; private boolean generateNonExecutableJson = false; private final List<TypeAdapterFactory> hierarchyFactories = new ArrayList(); private final Map<Type, InstanceCreator<?>> instanceCreators = new HashMap(); private boolean lenient = false; private LongSerializationPolicy longSerializationPolicy = LongSerializationPolicy.DEFAULT; private boolean prettyPrinting = false; private boolean serializeNulls = false; private boolean serializeSpecialFloatingPointValues = false; private int timeStyle = 2; public GsonBuilder() { } GsonBuilder(Gson gson) { this.excluder = gson.excluder; this.fieldNamingPolicy = gson.fieldNamingStrategy; this.instanceCreators.putAll(gson.instanceCreators); this.serializeNulls = gson.serializeNulls; this.complexMapKeySerialization = gson.complexMapKeySerialization; this.generateNonExecutableJson = gson.generateNonExecutableJson; this.escapeHtmlChars = gson.htmlSafe; this.prettyPrinting = gson.prettyPrinting; this.lenient = gson.lenient; this.serializeSpecialFloatingPointValues = gson.serializeSpecialFloatingPointValues; this.longSerializationPolicy = gson.longSerializationPolicy; this.datePattern = gson.datePattern; this.dateStyle = gson.dateStyle; this.timeStyle = gson.timeStyle; this.factories.addAll(gson.builderFactories); this.hierarchyFactories.addAll(gson.builderHierarchyFactories); } public GsonBuilder setVersion(double d) { this.excluder = this.excluder.withVersion(d); return this; } public GsonBuilder excludeFieldsWithModifiers(int... iArr) { this.excluder = this.excluder.withModifiers(iArr); return this; } public GsonBuilder generateNonExecutableJson() { this.generateNonExecutableJson = true; return this; } public GsonBuilder excludeFieldsWithoutExposeAnnotation() { this.excluder = this.excluder.excludeFieldsWithoutExposeAnnotation(); return this; } public GsonBuilder serializeNulls() { this.serializeNulls = true; return this; } public GsonBuilder enableComplexMapKeySerialization() { this.complexMapKeySerialization = true; return this; } public GsonBuilder disableInnerClassSerialization() { this.excluder = this.excluder.disableInnerClassSerialization(); return this; } public GsonBuilder setLongSerializationPolicy(LongSerializationPolicy longSerializationPolicy2) { this.longSerializationPolicy = longSerializationPolicy2; return this; } public GsonBuilder setFieldNamingPolicy(FieldNamingPolicy fieldNamingPolicy2) { this.fieldNamingPolicy = fieldNamingPolicy2; return this; } public GsonBuilder setFieldNamingStrategy(FieldNamingStrategy fieldNamingStrategy) { this.fieldNamingPolicy = fieldNamingStrategy; return this; } public GsonBuilder setExclusionStrategies(ExclusionStrategy... exclusionStrategyArr) { for (ExclusionStrategy withExclusionStrategy : exclusionStrategyArr) { this.excluder = this.excluder.withExclusionStrategy(withExclusionStrategy, true, true); } return this; } public GsonBuilder addSerializationExclusionStrategy(ExclusionStrategy exclusionStrategy) { this.excluder = this.excluder.withExclusionStrategy(exclusionStrategy, true, false); return this; } public GsonBuilder addDeserializationExclusionStrategy(ExclusionStrategy exclusionStrategy) { this.excluder = this.excluder.withExclusionStrategy(exclusionStrategy, false, true); return this; } public GsonBuilder setPrettyPrinting() { this.prettyPrinting = true; return this; } public GsonBuilder setLenient() { this.lenient = true; return this; } public GsonBuilder disableHtmlEscaping() { this.escapeHtmlChars = false; return this; } public GsonBuilder setDateFormat(String str) { this.datePattern = str; return this; } public GsonBuilder setDateFormat(int i) { this.dateStyle = i; this.datePattern = null; return this; } public GsonBuilder setDateFormat(int i, int i2) { this.dateStyle = i; this.timeStyle = i2; this.datePattern = null; return this; } public GsonBuilder registerTypeAdapter(Type type, Object obj) { boolean z = obj instanceof JsonSerializer; C$Gson$Preconditions.checkArgument(z || (obj instanceof JsonDeserializer) || (obj instanceof InstanceCreator) || (obj instanceof TypeAdapter)); if (obj instanceof InstanceCreator) { this.instanceCreators.put(type, (InstanceCreator) obj); } if (z || (obj instanceof JsonDeserializer)) { this.factories.add(TreeTypeAdapter.newFactoryWithMatchRawType(TypeToken.get(type), obj)); } if (obj instanceof TypeAdapter) { this.factories.add(TypeAdapters.newFactory(TypeToken.get(type), (TypeAdapter) obj)); } return this; } public GsonBuilder registerTypeAdapterFactory(TypeAdapterFactory typeAdapterFactory) { this.factories.add(typeAdapterFactory); return this; } public GsonBuilder registerTypeHierarchyAdapter(Class<?> cls, Object obj) { boolean z = obj instanceof JsonSerializer; C$Gson$Preconditions.checkArgument(z || (obj instanceof JsonDeserializer) || (obj instanceof TypeAdapter)); if ((obj instanceof JsonDeserializer) || z) { this.hierarchyFactories.add(TreeTypeAdapter.newTypeHierarchyFactory(cls, obj)); } if (obj instanceof TypeAdapter) { this.factories.add(TypeAdapters.newTypeHierarchyFactory(cls, (TypeAdapter) obj)); } return this; } public GsonBuilder serializeSpecialFloatingPointValues() { this.serializeSpecialFloatingPointValues = true; return this; } public Gson create() { ArrayList arrayList = r1; ArrayList arrayList2 = new ArrayList(this.factories.size() + this.hierarchyFactories.size() + 3); arrayList2.addAll(this.factories); Collections.reverse(arrayList2); ArrayList arrayList3 = new ArrayList(this.hierarchyFactories); Collections.reverse(arrayList3); arrayList2.addAll(arrayList3); addTypeAdaptersForDate(this.datePattern, this.dateStyle, this.timeStyle, arrayList2); return new Gson(this.excluder, this.fieldNamingPolicy, this.instanceCreators, this.serializeNulls, this.complexMapKeySerialization, this.generateNonExecutableJson, this.escapeHtmlChars, this.prettyPrinting, this.lenient, this.serializeSpecialFloatingPointValues, this.longSerializationPolicy, this.datePattern, this.dateStyle, this.timeStyle, this.factories, this.hierarchyFactories, arrayList); } private void addTypeAdaptersForDate(String str, int i, int i2, List<TypeAdapterFactory> list) { DefaultDateTypeAdapter defaultDateTypeAdapter; DefaultDateTypeAdapter defaultDateTypeAdapter2; DefaultDateTypeAdapter defaultDateTypeAdapter3; if (str != null && !"".equals(str.trim())) { defaultDateTypeAdapter2 = new DefaultDateTypeAdapter((Class<? extends Date>) Date.class, str); defaultDateTypeAdapter = new DefaultDateTypeAdapter((Class<? extends Date>) Timestamp.class, str); defaultDateTypeAdapter3 = new DefaultDateTypeAdapter((Class<? extends Date>) java.sql.Date.class, str); } else if (i != 2 && i2 != 2) { DefaultDateTypeAdapter defaultDateTypeAdapter4 = new DefaultDateTypeAdapter(Date.class, i, i2); DefaultDateTypeAdapter defaultDateTypeAdapter5 = new DefaultDateTypeAdapter(Timestamp.class, i, i2); DefaultDateTypeAdapter defaultDateTypeAdapter6 = new DefaultDateTypeAdapter(java.sql.Date.class, i, i2); defaultDateTypeAdapter2 = defaultDateTypeAdapter4; defaultDateTypeAdapter = defaultDateTypeAdapter5; defaultDateTypeAdapter3 = defaultDateTypeAdapter6; } else { return; } list.add(TypeAdapters.newFactory(Date.class, defaultDateTypeAdapter2)); list.add(TypeAdapters.newFactory(Timestamp.class, defaultDateTypeAdapter)); list.add(TypeAdapters.newFactory(java.sql.Date.class, defaultDateTypeAdapter3)); } } |