2010-11-23 12 views
0

Ich habe ein Array, das ich aus einer Datenbank ResultSet erstellt habe. Ich versuche es zu serialisieren, damit ich es über einen Socket-Stream senden kann. Im Moment bekomme ich eine Fehlermeldung, dass das Array nicht serialisierbar ist. Der Code, den ich habe, ist dort unten, der erste Teil der Klasse ist ein Objekt für das Array zu erstellen:Serialisieren Sie ein Objekt-Array, das über Sockets gesendet wird

class ProteinData 
{ 
    private int ProteinKey; 

    public ProteinData(Integer ProteinKey) 
    { 
     this.ProteinKey = ProteinKey; 
    } 

    public Integer getProteinKey() { 
     return this.ProteinKey; 
    } 

    public void setProteinKey(Integer ProteinKey) { 
     this.ProteinKey = ProteinKey; 
    } 
} 

Der Code zum Auffüllen des Arrays:

public List<ProteinData> readJavaObject(String query, Connection con) throws Exception 
    {   
     PreparedStatement stmt = con.prepareStatement(query); 
     query_results = stmt.executeQuery(); 
     while (query_results.next()) 
     { 
      ProteinData pro = new ProteinData(); 
      pro.setProteinKey(query_results.getInt("ProteinKey")); 
      tableData.add(pro); 
     } 
     query_results.close(); 
     stmt.close(); 
     return tableData; 
    } 

Und um den Code zu nennen dies ist :

Und der Code recieving dies:

List dataList = (List) input_stream.readObject(); 

Kann mir jemand helfen, dieses Array zu serailisieren. Alles, was ich in Foren finden kann, sind einfache Arrays (EG. Int []).

Ich habe versucht, die serializable zu der Klasse und der UID-Nummer hinzuzufügen, aber java.lang.ClassNotFoundException: socketserver.ProteinData Fehlermeldung erhalten. Hat jemand jetzt warum?

Danke für jede Hilfe.

+0

Ich kann kein Array in Ihrem Code sehen ... nur Liste

+0

Wenn die 'readJavaObject()' Methode hier die vollständige Methode ist, werden Sie andere Probleme auf der ganzen Linie haben, wie es Ihnen scheint verwenden eine Liste auf Klassenebene, um Ergebnisse für jeden Methodenaufruf zurückzugeben. –

Antwort

6

Grundsätzlich benötigen Sie, dass die Klassen, die Sie implementieren Serializable serialisiert werden soll. Und wenn Sie die Warnung in Bezug auf die Seriennummer vermeiden wollen, sollten Sie auch eine für jede einzelne haben, das ist ein Code, der verwendet wird, um Ihre spezifische Version der Klasse zu unterscheiden. Lesen Sie ein Tutorial wie this one, um zusätzliche Informationen zu erhalten, Serialisierung ist nicht so schwer zu handhaben.

Beachten Sie jedoch, dass Serialisierung ist fehlerhaft, wenn zwischen zwei verschiedenen Versionen der JVM (und es hat einige Fehler im Allgemeinen).

Nur eine Randnotiz: Die Schnittstelle Serializable gibt eigentlich der Klasse selbst kein erforderliches Feature (es ist keine typische Schnittstelle) und es wird nur verwendet, um zwischen Klassen zu unterscheiden, die über Streams und alle gesendet werden sollen die Anderen. Wenn eine Klasse Serializable ist, muss natürlich auch die gesamte Komponente (Instanzvariablen) serialisiert werden, um das gesamte Objekt senden zu können.

4

Ändern Sie Ihre Klassendeklaration:

Klasse ProteinData implementiert Serializable { ... }

1

Ich habe als Minimum gedacht, dass Sie müssten

Klasse ProteinData implementiert Serializable und ein

private static final lange serialVersionUID = 1234556L; (Eclipse wird die magische Zahl für Sie generieren). in der Klasse.

Verwandte Themen