🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: borland.public.jbuilder.java.api
Article #2250

SERIALIZING a CLASS containing non SERIALIZABLE objects

#2250
From: Laurent Souriau
Date: Tue, 10 Apr 2001 08:16
213 lines
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-mail

Show 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