Article View: borland.public.jbuilder.java.api
Article #2250SERIALIZING a CLASS containing non SERIALIZABLE objects
From: Laurent Souriau
Date: Tue, 10 Apr 2001 08:16
Date: Tue, 10 Apr 2001 08:16
213 lines
6494 bytes
6494 bytes
Hi everybody,
I have a problem with a self made class that I want to make serializable.
Everything is Ok, except for a member of this class which is a
BufferedReader (non serializable). It gives me a NULL pointer exception
on it. I tried to declare it as :
----
private transient BufferedReader data;
----
But it doesn't improve the things.
Anybody has an idea ?
Laurent
email : lsouriau@club-internet.fr
Here is the code
****************************************************************************
******
package com.aqsacom.roamingclient;
import java.util.NoSuchElementException;
import java.util.Hashtable;
import java.util.Vector;
import java.util.Enumeration;
import java.io.*;
/**
* Objet permettant de lire un fichier contenant des table (resultat de
SELECT)
* souvent utilis� pour des fichiers (mais marche sur tout BufferedReader)
*/
public class TableReader implements Serializable
{
/**
* liste des cl�s de la table (Nom des colonnes)
*/
private String [] keys;
private transient BufferedReader data; <------- Here is the
problem !!!
private int tableNumber = 0;
/**
* Fin des donn�es ou non ?
*/
private boolean end = false;
private String content;
private int [] breakPoints;
public TableReader(BufferedReader donnee)
{
// BufferedReader data = donnee;
try
{
data = donnee;
initKeys(donnee.readLine(),donnee.readLine());
}
catch (IOException e) {e.printStackTrace();}
skip();
}
// Pour serialization il faut un constructeur sans arguments
public TableReader()
{
}
public TableReader(String fileName) throws java.io.FileNotFoundException
{
this(new BufferedReader(new FileReader(fileName)));
}
public TableReader(File fichier) throws java.io.FileNotFoundException
{
this(new BufferedReader(new FileReader(fichier)));
}
/**
* retourne la liste des colonnes du SELECT
*/
public String [] getAllKeys()
{
return keys;
}
private void makeElement(String line, Hashtable N)
{
if (line == null) return;
for (int i=0;i<keys.length;i++)
{
if (breakPoints[i+1]>line.length())
{N.put(keys[i], line.substring(breakPoints[i],line.length()).trim());}
else{N.put(keys[i],
line.substring(breakPoints[i],breakPoints[i+1]).trim());}
}
}
private void makeElement(String line, Vector v)
{
if (line == null) return;
v.setSize(keys.length);
for (int i=0;i<keys.length;i++)
{
if (breakPoints[i+1]>line.length())
{v.add(i, line.substring(breakPoints[i],line.length()).trim());}
else{v.add(i, line.substring(breakPoints[i],breakPoints[i+1]).trim());}
}
}
private void initKeys(String titleLine, String tiretLine)
{
Vector v = new Vector();
int start = 0;
int end =0;
while (end>=0)
{
v.addElement(new Integer(end));
start=end;
end = tiretLine.indexOf(32,start+1);
}
breakPoints = new int[v.size()];
int vSize = v.size();
for (int i=0;i<vSize;i++)
{
breakPoints[i] = ((Integer)v.get(i)).intValue();
}
keys = new String [vSize-1];
for (int j=0;j<breakPoints.length-1;j++)
{
keys[j] = titleLine.substring(breakPoints[j],breakPoints[j+1]).trim();
}
}
public int extractInfo(Hashtable t)
{
if (content == null) {return 0;}
System.out.println("ligne 1");
String returnV = new String (content);
System.out.println("ligne 2");
content = null;
makeElement(returnV,t);
System.out.println("ligne 3");
int tableNo = tableNumber;
System.out.println("ligne 4");
skip();
System.out.println("ligne 5");
return tableNo;
}
public int extractInfo(Vector v)
{
if ( (content == null) || (end==true) ) {return 0;}
v.clear();
String returnV = new String (content);
content = null;
makeElement(returnV,v);
int tableNo = tableNumber;
skip();
return tableNo;
}
private String read()
{
if (content == null) {return null;}
String returnV = new String (content);
content = null;
return returnV;
}
public boolean isEOF() {return end;}
private void skip()
{
try
{
System.out.println("ligne 6");
content = data.readLine();
System.out.println("ligne 7");
if (content==null) {end=true;return;}
if ( content.equals("") )
{ tableNumber = tableNumber +1;
String firstK = data.readLine();
if (firstK!=null) {initKeys(firstK,data.readLine());skip();}
else {end=true;
data.close();
return;}
}
}
catch(IOException e) {e.printStackTrace();}
}
public int getTableNumber()
{
return tableNumber;
}
}
****************************************************************************
*******
Technical Details
Message-ID:
<9aufdi$k94$1@s1.read.news.oleane.net>Path:
arc1-ca.pugleaf.net!supernews.google.com!sn-xit-03!supernews.com!freenix!oleane.net!oleane!nnrp.oleane.net!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII X-Google-Thread: 1089d0,7c0ff242316c0dd1,start X-Google-Attributes: gid1089d0,public X-Google-Thread: f631b,7c0ff242316c0dd1,start X-Google-Attributes: gidf631b,public X-Google-Thread: f6cb0,7c0ff242316c0dd1,start X-Google-Attributes: gidf6cb0,public X-Google-Thread: 113ae9,7c0ff242316c0dd1,start X-Google-Attributes: gid113ae9,public X-Google-Thread: 10568c,7c0ff242316c0dd1,start X-Google-Attributes: gid10568c,public X-Google-Thread: 10a146,7c0ff242316c0dd1,start X-Google-Attributes: gid10a146,public X-Google-Thread: f74b3,7c0ff242316c0dd1,start X-Google-Attributes: gidf74b3,public X-Google-ArrivalTime: 2001-04-10 01:20:08 PST Path: arc1-ca.pugleaf.net!supernews.google.com!sn-xit-03!supernews.com!freenix!oleane.net!oleane!nnrp.oleane.net!not-for-mail From: "Laurent Souriau" <lsouriau@club-internet.fr> Newsgroups: borland.public.jbuilder.java.api,borland.public.jbuilder.java.language,cn.bbs.comp.lang.java,comp.lang.java.help,comp.lang.java.programmer,de.comp.lang.java,fr.comp.lang.java Subject: SERIALIZING a CLASS containing non SERIALIZABLE objects Date: Tue, 10 Apr 2001 10:16:50 +0200 Organization: Guest of France Telecom Oleane's newsreading service Lines: 215 Message-ID: <9aufdi$k94$1@s1.read.news.oleane.net> NNTP-Posting-Host: 194.250.203.22 X-Trace: s1.read.news.oleane.net 986890483 20772 194.250.203.22 (10 Apr 2001 08:14:43 GMT) X-Complaints-To: abuse@oleane.net NNTP-Posting-Date: Tue, 10 Apr 2001 08:14:43 +0000 (UTC) X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 5.50.4133.2400 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400