Writing /home/infogasy/domains/wiki.infogasy.net/public_html/data/cache/9/9884d228cb20df915b4c5c3c67350694.xhtml failed

Andao indray hirasaka objet faha-X

Mikasika ny fonosana E/S (I/O) amin'ny Java

Andao ary hotsidihantsika kely fotsiny ny amin’izy io.

Izao mantsy toy ny fitaovana fanoratana praograma rehetra dia tsy maintsy misy foana, ary zava-dehibe ny amin’io fampidirana na famoahana zavatra kirakiraina anaty praograma io.
Amin’ny sehatra tena fampiharana anefa dia tsara ho fantatra fa saika sehatra iray mahaleo-tena hatrizay ny momba azy io amin’ny alalan?ireo vainga mpandrindra fitehirizana (SGBD), ka ny asa tena ifotorana izany ao anaty programanao dia ny firesahana amin’ilay fitaovana mpandrindra ny fitehirizana, izay efa napetraka sy eken’ny maro (standard) moa, ary mitondra ny anarana hoe SQL.

Dia io rafitra fitehirizana io izany ao anaty fitambaran’ny vainga praograma soratana no antsoina hoe: andalan-drafitra fitehirizana maharitra na ?couche de persistence?, mba hanavahana amin’ireo mpitahiry mandalo antsoina hoe “conteneur de donnee”, izay mipetraka anaty fitehirizana mandalo ( memoire vive).

Raha jerena akaiky anefa moa ny API-ny SUN mikasika ny fonosana E/S : java.io, dia tena mifampiditra be ireo kilasy mikasika izy io. Tany ampanombohana (versio talohan’ny 1.1) no efa nisy ny fampidirana (InputStream) sy ny famoahana (OutputStream), taty aoriana (version 1.1 no mankaty ) dia nipoitra koa ny fampidirana (Reader) sy ny famoahana (Writer). Dia ao ambanin?izireo izany no hahitana ireo kilasy marobe rehetra sahaza ny karazana zavatra tranainy (type primitif) na Objet kirakiraina anaty praograma soratana amin’ny Java. Tsara marihina izany fa ireo kilasy fototra no tena hita ao anatin?ireo fonosana ireo, ary dia anjaran’ny mpamorona no manangana vainga mpandrindra fitehirirzana sahaza ny filana.

Ho an’ny fitehirizana manaiky ny fikirakirana tsy voatery mitandahatra (non-sequentiel na access aleatoire) moa dia tsara marihina ny kilasy RandomAccessFile io no ampiasain’ny Db4Object (tena manja be !?) ao anatin’ny vainga mpandrindra fitehirizana mifototra avy hatrany amin’ny karazana “Objet” (SGBDO) fa tsy “relationnel” (SGBDR).

Raha ny marina izany, mba tsy hiverenana hamoronana indray ny kodiarana, dia tsara kokoa no tonga dia mikirakira ireo vainga efa nisy mpanoratra ka mandeha tsara,ary hita fa mahomby tsara amin’ny ilainao azy, ao anaty praogramanao. Izireny moa dia hita toy ny fonosana maro isan-karazany ka dia manao import fotsiny sisa atao ao anaty vainga praograma foroninao tiana hampiasaina ireo mpandrindra fitehirizana ireo.

Ny Serialisation sy Deserialisation na kilasy ObjectOuputStream sy ObjectInputStream

Izy ity moa dia fomba iray tena mahomby tokoa ao anaty tontolo Java, raha resaka fonosana fampidirana (InputStream) sy famoahana (OutputStream) zavatra kirakiraina no hatao, saingy ny tena tsara marihina aminy dia sahaza ny Objet tokoa ireo kilasy miasa ao anatiny. Vokany : na karazana tranainy fonosina anaty wrapper na tsia, na Objet amin’ny ankapobeny izany dia mety avokoa rehefa tandremana tsara ny fifanandrifiana tamin’ilay zavatra fony izy navoka ho tehirizina.

Tsara marihina koa anefa fa tsy maintsy mampiasa ny interface Serializable ireo kilasy tianao hampiasa io Serialisation sy Deserialisation io. Io interface io moa dia tsy misy hetsika na methode ho faritana amin’ny kilasinao intsony ao anatiny (toy ilay lesona faha-9), fa marika tsotra fotsiny no ilain’ny JVM azy io.

Andao ary hampiasa ny Serialisation sy Deserialisation isika, raha ohatra ka hiverenantsika indray ilay fampiasana tary amin’ny lesona faha-5, ka ho fenointsika sy hasiana fanovana kely miandalana :

package resakaObjet;
 
import java.io.* ;
 
abstract public class Tahiry
{
      private String toerana; // Toerana misy ilay fichier
      private String anarana; // Anaran'ilay fichier
      public File tondro;     // Ilaina amin'ny fampiasaina ny fonosana java.io, raha tiana
                              // ny hanisy tondro ilay tahiry fichier hiasana. Kilasy ao anaty
                              // java.io izy io
 
      public Tahiry(String toerana, String anarana) // Constructeur an'ity classe de base ity
      {
            String s = toerana.concat("\\").concat(anarana);
            tondro = new File(s);
      }
 
      public String getToerana()
      {
            return toerana;
      }
 
      public void setToerana(String toeranaIray)
      {
            toerana = toeranaIray;
      }
 
      public String getAnarana()
      {
            return anarana;
      }
 
      public void setAnarana(String anaranaIray)
      {
            anarana = anaranaIray;
      }
 
      public File getTondro()
      {
            return tondro;
      }
 
      public void setTondro(File tondroIray)
      {
            tondro = tondroIray;
      }
 
/* Mamaky zavatra anaty fichier voatondro iray ary mamerina zavatra karazana Object
  * Kilasy tsy mbola voafaritra izy io eto aloha (abstract)
  * @return zavatra karazana Object navoaka avy anaty fitehirizana
  */
 
      abstract public Object mamakyTahiry();
 
/* Manoratra zavatra anaty fichier voatondro iray ka tsy misy zavatra averina amin'ity hetsika ity
  * Kilasy tsy mbola voafaritra izy io eto aloha (abstract)
  * @param zavatra ? zavatra ho tehirizina
  */
 
      abstract public void manoratraTahiry(Object zavatra);
}

Fanazavana :

  • Nampiana toetra iray mitondra ny karazana File (fonondroana fichier izy io, ary ao anaty fonosana java.io ?ny API JSE.
  • Ny constructeur dia mampitohy ilay fanondroana fichier antsoina hoe : tondro eto, amin’ireo toerana sy anarana misy ilay tahiry anaty fichier. Dia tsy hadino moa ireo getters sy setters mahazatra amin’ireo toetra efa voafaritra.
  • Ireo hetsika roa abstract dia mazava ho azy fa natao hamaritana fotsiny hoe toa izao ny : anaran?ilay hetsika, ny argument ampidirina (raha misy) ary ny karazana vokatra averina (raha misy). Ireo voatanisa ireo moa no atao hoe: sonian?ilay hetsika na signature, ary tsy maintsy voahaja ireo sonia ireo rehefa mamaritra izay hatao ao anaty hetsika isika any amin’ireo kilasy zanak?ilay kilasy Tahiry rehetra.
package resakaObjet;
 
import java.io.* ;
 
public class TahirySoratraASCII extends Tahiry
{
      private StringBuffer soratraASCII; // fitehirizana mandalo soratra ASCII
 
      public TahirySoratraASCII(String toerana, String anarana, String soratra)
      {
          super(toerana, anarana); // Ilaina ho an'ilay constructeur kilasy eo ambony.
          soratraASCII = new StringBuffer(soratra);
      }
 
      public StringBuffer getSoratraASCII()
      {
          return soratraASCII;
      }
 
      public void setSoratraASCII(StringBuffer soratra)
      {
          soratraASCII = soratra;
      }
 
      public void manoratraTahiry(Object zavatra)    // Famaritana ilay kilasy voalaza tary amin'ny kilasy
                                                     // rainy tary
      {
          try {
               FileOutputStream tondroF = new FileOutputStream(getTondro());
               ObjectOutputStream tondroOb = new ObjectOutputStream(tondroF);
 
               tondroOb.writeObject(zavatra);
               tondroOb.close();
          }
          catch (IOException e)
          {
               System.out.println("E/S diso !");
          }
      }
 
      public Object mamakyTahiry()             // Famaritana ilay kilasy voalaza tary amin'ny kilasy
                                               // rainy tary
    {
          StringBuffer sBuff = new StringBuffer();
          try {
               FileInputStream tondroF = new FileInputStream(getTondro());
               ObjectInputStream tondroOb = new ObjectInputStream(tondroF);
 
               sBuff.append((String)tondroOb.readObject());
               tondroOb.close();
               return sBuff;
          }
          catch (Exception e)
          {
               System.out.println("E/S diso !");
               return null;
          }
      }
 
      public String toString()
      {
          return soratraASCII.toString();
      }
 
      static public void main(String arg[])
      {
          TahirySoratraASCII tah = new TahirySoratraASCII(".","tahiry.dat","Soratra :\n");
          tah.setSoratraASCII(tah.getSoratraASCII().
                                       append("Tahiry soratara ASCII ity\nInfogasy.net"));
          tah.manoratraTahiry(tah.toString());
 
          tah.setSoratraASCII((StringBuffer)tah.mamakyTahiry());
          System.out.println(tah.toString());
      }
}

Fanazavana:

  • Mazava loatra aloha izany ny amin’ilay hoe: public class TahirySoratraASCII extends Tahiry, fa kilasy zanak?ilay kilasy Tahiry tetsy ambony ity kilasy TahirySoratraASCII ity. Io izany dia kilasy natokana mba hikirakirana zavatra karazana soratra fotsiny ihany (caractere ASCII na texte)
  • Napetraka koa fa misy toetra iray ao anatiny, ka karazana StringBuffer izy io, antsoina hoe sorataraASCII eto. Io moa dia mbola kilasy-na objet koa ao anaty API ny JSE, ary ny ilana azy dia ahafahana mikirakira ireo zavatra karazana texte anaty fitehirizana mandalo (memoire vive) ny milina mpikajy
  • Ny constructeur-ny kilasy TahirySoratraASCII, ankoatra ilay fandefasana any amin’ilay kilasy rainy ireo arguments toerana sy anarana: super(toerana, anarana); izay tsy maintsy atao aloha indrindra ao anaty constructeur-ny kilasy zanany, dia misy koa fahafahana mametraka mialoha avy hatrany soratra ao amin’ilay toetra sorataraASCII: . soratraASCII = new StringBuffer(soratra);
  • Ny famaritana izay anaty hetsika roa eto : public void manoratraTahiry(Object zavatra) : mametraka sy public Object mamakyTahiry() : mamaky ireo soratra anaty fichier dia tsy maintsy asiana ireo fifehezana ny kiana mety hitranga: try { ?.. } catch (IOException e) { ? }, satria kirakira mety hisehoan-zavatra misy kiana maro no atao.
FileOutputStream tondroF = new FileOutputStream(getTondro());
ObjectOutputStream tondroOb = new ObjectOutputStream(tondroF);

Moa dia mamaritra fa ilay tondro alaina amin’ny getTondro() (miasa eto ny liason dynamique an !) dia atohy amin’ny lalana fivoahana Objet mankany amin’ilay tahiry, ka ny Objet tondroOb no hampiasaina azy amin’izay tanjona izay,

tondroOb.writeObject(zavatra);
tondroOb.close();

kosa dia manoratra avy hatrany ny Objet zavatra any amin’ilay tahiry izany. Avy eo moa dia tsy maintsy akatona ilay lalana, mba ho voasoratra marina any amin’ny fitehirizana maharitra ireo zavatra soratana.

  • Dia tsy hadino ilay hetsika public String toString() mahazatra, mba hamoahantsika vokatra tsara arahina rehefa mihodina ny praogramantsika.

Ary farany moa dia ilay hetsika main(String arg[]) mba hanandramana ny fiasan?ireo hetsika rehetra nofaritina ao anatin?ity kilasintsika ity. Eto moa izany ny atao dia:
Ireo toetra :
toerana ⇒ . (point) ; izany hoe ny repertoire misy ilay fichier dia izay misy ity source ity ihany.
anarana ⇒ tahiry.txt, io izany ny anaran?ilay fichier
soratra ⇒ ?Soratra:\n?, Soratra apetraka mialoha anatin?ilay toetra soratraASCII; (marihina moa fa ny \n dia mitory fiovana andalana amin’ireo mari-tsoratra ASCII).

tah.setSoratraASCII(tah.getSoratraASCII().
                         append("Tahiry soratara ASCII ity\nInfogasy.net"));

Mampiditra anaty tahiry mandalo soratraASCII ireo soratra hotehirizina.

tah.manoratraTahiry(tah.toString());

Mandefa any anaty tahiry fichier ireo soratra, sady manakatona ny ilay tahiry

tah.setSoratraASCII((StringBuffer)tah.mamakyTahiry());
System.out.println(tah.toString());

Mamaky avy any anaty tahiry fichier ireo nosoratana tetsy aloha, ka mametraka azy indray anaty tahiry soratraASCII, avy eo dia mandefa azy ho jerena amin’ny ecran.

Fehiny:

Ny Serialisation izany dia fomba iray manamora ny fitehirizana maharitra ireo Objet maro mety ho kirakiraina. Noho izany dia maro misandrahaka ny fampiasana azy io satria tsy misy manakana mihitsy izany ny mampivelatra azy amin’ny tanjona hafa mihitsy. Ohatra izao: ny API Java XML-RPC an’ny Projet Jakarta-ny ASF (fiantsoana hetsika mitoetra amina JVM lavitra ny JVM ihodinanan’ny praogramanao) dia mampiasa azy io mba hampitana ireo argument alefa ho an?ilay hetsika lavitra sy koa mamerina ireo vokatra avy amin’ilay hetsika lavitra ho aty amin’ilay praogramanao. Mazava moa izany fa socket no mampifandray ireo JVM roa ireo.

(Mbola hitohy ?)

 

andaohiresakaobjetfahax.txt · Novaina farany:: 2008/09/11 12:43