From 3a7831ed8397c65852c9ed9eee33f1d592378943 Mon Sep 17 00:00:00 2001 From: Size43 Date: Thu, 21 May 2015 22:22:51 +0200 Subject: Added writeObject & readObject methods --- app/src/main/AndroidManifest.xml | 2 + .../java/org/rssin/android/FiltersActivity.java | 11 ++-- .../main/java/org/rssin/android/FiltersList.java | 14 +++++ .../main/java/org/rssin/neurons/FeedSorter.java | 51 +++++++++++++--- .../java/org/rssin/neurons/MultiNeuralNetwork.java | 15 ++++- .../main/java/org/rssin/neurons/NeuralNetwork.java | 16 ++++- app/src/main/java/org/rssin/neurons/Neuron.java | 14 ++++- .../java/org/rssin/neurons/SerializationTools.java | 69 ++++++++++++++++++++++ 8 files changed, 174 insertions(+), 18 deletions(-) mode change 100644 => 100755 app/src/main/AndroidManifest.xml mode change 100644 => 100755 app/src/main/java/org/rssin/android/FiltersActivity.java mode change 100644 => 100755 app/src/main/java/org/rssin/android/FiltersList.java create mode 100755 app/src/main/java/org/rssin/neurons/SerializationTools.java (limited to 'app/src/main') diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml old mode 100644 new mode 100755 index e4f63c3..4e125b5 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,8 @@ package="org.rssin.rssin" > + + trainingCases = new ArrayList<>(); - - private final int[] isNthMonthInput = new int[12]; - private final int[] isNthWeekDayInput = new int[7]; - private final int isMorning, isAfternoon, isEvening, isNight, biasInput; - private final Hashtable categoryInputs = new Hashtable<>(); - private final Hashtable wordInputs = new Hashtable<>(); - private final Hashtable authorInputs = new Hashtable<>(); + private MultiNeuralNetwork nn = new MultiNeuralNetwork(25, 50); + private List trainingCases = new ArrayList<>(); + + private int[] isNthMonthInput = new int[12]; + private int[] isNthWeekDayInput = new int[7]; + private int isMorning, isAfternoon, isEvening, isNight, biasInput; + private Hashtable categoryInputs = new Hashtable<>(); + private Hashtable wordInputs = new Hashtable<>(); + private Hashtable authorInputs = new Hashtable<>(); + + private void writeObject(java.io.ObjectOutputStream stream) throws IOException { + stream.writeObject(nn); + stream.writeObject(trainingCases); + SerializationTools.writeArray(isNthMonthInput, stream); + SerializationTools.writeArray(isNthWeekDayInput, stream); + stream.writeInt(isMorning); + stream.writeInt(isAfternoon); + stream.writeInt(isEvening); + stream.writeInt(isNight); + stream.writeInt(biasInput); + stream.writeObject(categoryInputs); + stream.writeObject(wordInputs); + stream.writeObject(authorInputs); + } + + private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException { + nn = (MultiNeuralNetwork) stream.readObject(); + trainingCases = (List) stream.readObject(); + isNthMonthInput = SerializationTools.readArrayInt(stream); + isNthWeekDayInput = SerializationTools.readArrayInt(stream); + isMorning = stream.readInt(); + isAfternoon = stream.readInt(); + isEvening = stream.readInt(); + isNight = stream.readInt(); + biasInput = stream.readInt(); + categoryInputs = (Hashtable) stream.readObject(); + wordInputs = (Hashtable) stream.readObject(); + authorInputs = (Hashtable) stream.readObject(); + } public FeedSorter() { biasInput = nn.addInput(); diff --git a/app/src/main/java/org/rssin/neurons/MultiNeuralNetwork.java b/app/src/main/java/org/rssin/neurons/MultiNeuralNetwork.java index 03ad2d1..68ddddd 100755 --- a/app/src/main/java/org/rssin/neurons/MultiNeuralNetwork.java +++ b/app/src/main/java/org/rssin/neurons/MultiNeuralNetwork.java @@ -1,6 +1,11 @@ package org.rssin.neurons; +import android.util.Log; + +import java.io.IOException; import java.io.Serializable; +import java.util.Hashtable; +import java.util.List; /** * @author Jos @@ -8,7 +13,15 @@ import java.io.Serializable; */ class MultiNeuralNetwork implements Serializable { private static final long serialVersionUID = 0; - private final NeuralNetwork[] networks; + private NeuralNetwork[] networks; + + private void writeObject(java.io.ObjectOutputStream stream) throws IOException { + SerializationTools.writeArray(networks, stream); + } + + private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException { + networks = SerializationTools.readArray(stream, NeuralNetwork.class); + } public MultiNeuralNetwork(int numNetworks, int numHiddenNodes) { networks = new NeuralNetwork[numNetworks]; diff --git a/app/src/main/java/org/rssin/neurons/NeuralNetwork.java b/app/src/main/java/org/rssin/neurons/NeuralNetwork.java index 0acfda7..0540652 100755 --- a/app/src/main/java/org/rssin/neurons/NeuralNetwork.java +++ b/app/src/main/java/org/rssin/neurons/NeuralNetwork.java @@ -1,7 +1,9 @@ package org.rssin.neurons; import android.annotation.SuppressLint; +import android.util.Log; +import java.io.IOException; import java.io.Serializable; /** @@ -9,8 +11,18 @@ import java.io.Serializable; */ class NeuralNetwork implements Serializable { private static final long serialVersionUID = 0; - private final Neuron[] hiddenNodes; - private final Neuron outputNode; + private Neuron[] hiddenNodes; + private Neuron outputNode; + + private void writeObject(java.io.ObjectOutputStream stream) throws IOException { + SerializationTools.writeArray(hiddenNodes, stream); + stream.writeObject(outputNode); + } + + private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException { + hiddenNodes = SerializationTools.readArray(stream, Neuron.class); + outputNode = (Neuron) stream.readObject(); + } NeuralNetwork(int numHiddenNodes) { if (numHiddenNodes < 1) { diff --git a/app/src/main/java/org/rssin/neurons/Neuron.java b/app/src/main/java/org/rssin/neurons/Neuron.java index 23f69e1..ec4bf2c 100755 --- a/app/src/main/java/org/rssin/neurons/Neuron.java +++ b/app/src/main/java/org/rssin/neurons/Neuron.java @@ -1,5 +1,8 @@ package org.rssin.neurons; +import android.util.Log; + +import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -12,7 +15,16 @@ class Neuron implements Serializable { private static final long serialVersionUID = 0; private static final Random r = new Random(); - private final List weights = new ArrayList<>(); + private List weights = new ArrayList<>(); + + private void writeObject(java.io.ObjectOutputStream stream) throws IOException { + SerializationTools.writeList(weights, stream); + } + + private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException { + weights = SerializationTools.readList(stream); + } + public Neuron() { } diff --git a/app/src/main/java/org/rssin/neurons/SerializationTools.java b/app/src/main/java/org/rssin/neurons/SerializationTools.java new file mode 100755 index 0000000..41e79f2 --- /dev/null +++ b/app/src/main/java/org/rssin/neurons/SerializationTools.java @@ -0,0 +1,69 @@ +package org.rssin.neurons; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.List; + +/** + * @author Jos. + */ +public class SerializationTools { + public static void writeArray(int[] array, ObjectOutputStream stream) throws IOException { + stream.write(array.length); + for(int i : array) + { + stream.write(i); + } + } + + public static int[] readArrayInt(ObjectInputStream stream) throws IOException { + int[] array = new int[stream.readInt()]; + for(int i = 0; i < array.length; i++) + { + array[i] = stream.readInt(); + } + + return array; + } + + public static void writeArray(T[] array, ObjectOutputStream stream) throws IOException { + stream.write(array.length); + for(T i : array) + { + stream.writeObject(i); + } + } + + public static T[] readArray(ObjectInputStream stream, Class c) throws IOException, ClassNotFoundException { + T[] array = (T[]) Array.newInstance(c, stream.readInt()); + for(int i = 0; i < array.length; i++) + { + array[i] = (T) stream.readObject(); + } + + return array; + } + + public static void writeList(List list, ObjectOutputStream stream) throws IOException { + stream.write(list.size()); + for(T i : list) + { + stream.writeObject(i); + } + } + + public static List readList(ObjectInputStream stream) throws IOException, ClassNotFoundException { + List array = new ArrayList<>(); + int count = stream.readInt(); + + for(int i = 0; i < count; i++) + { + array.add((T) stream.readObject()); + } + + return array; + } +} -- cgit v1.2.3