2011-12-14 13 views
0

私はアンドロイド/ javaの初心者ですが、実際にはC++プログラマーです。私のアンドロイドプロジェクトでは、構造化されたデータをファイルに書き込んで、C++プログラムを使って読み返したいと思っています。しかし、書き込まれたデータファイルには、望ましくないデータを含む構造化データが含まれています。ファイルへの書き込み中に不要なデータを避ける方法。私はandroidでwriteobjectを使用して作成したファイルから不要なデータを削除する方法

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.io.Serializable; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 

public class TestAppActivity extends Activity implements Serializable { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

    try { 
    Example example = new Example(); 
    example.number = 50; 
    example.name = "Test_Value"; 

     ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(new File(getCacheDir(),"")+"/text.dat")); 
     out.writeObject((Example) example); 
     out.close(); 

     ObjectInputStream in = new ObjectInputStream(new FileInputStream(new File(getCacheDir(), "") + "/text.dat")); 
     Example readed = (Example)in.readObject(); 
     in.close(); 
     Log.e("Received", readed.number + " " + readed.name); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     Log.e("__ERROR__", e.toString());   
    } 
} 

class Example implements Serializable { 
    public int number; 
    public String name; 
} 
} 

おかげでObjectOutputStreamのは、それが他のJavaプログラムによって、後で読むことができspecific formatであなたのオブジェクトを書き込み、事前にちょうど参考のために、また、私のプログラムのためのコードを貼り付けて、プログラムはエラーが含まれていない

+0

「不要なデータ」とは何ですか?そして、プレーンテキストやXMLなどを使って読み書きするのはなぜですか? – THelper

+0

不要なデータにはクラス名、いくつかのコードなどが含まれています。C++では、file.write関数を使用してファイルに構造体を簡単に書き込むことができます。 – Riskhan

答えて

0

ています。データがファイルに書き込まれる方法を制御したい場合は、ObjectOutputStreamを使用せず、データを自分でシリアル化することをお勧めします。 xmlまたはjsonとして

また、オブジェクトにExternalizableインターフェイスを実装させることもできますが、これにはreadExternalwriteExternalの両方のメソッドを実装する必要があるため、オブジェクトを自分でシリアル化することになります。

0

必要なフォーマットに応じて、カスタムシリアル化が必要です。あなたがすることができ

http://docs.oracle.com/javase/1.4.2/docs/api/java/nio/ByteBuffer.html

そこチューンエンディアンと事前に定義されたオフセットでのバイナリ値を格納:バイナリ形式は、NIOバイトバッファを使用することができます。このために起因するエンディアンなどの潜在的な問題のために、かなりトリッキーになります。ケースのテキストベースのフォーマットで

が許容されている、私はバインディングJSONデータをお勧めします:

https://github.com/ko5tik/jsonserializer

それは、この限り簡単にJSTています:

JSONMarshaller.marshall(<outputStremWriterYouHaveToCreate>,<objectToSerialize>) 

マーシャルオブジェクトは、(また、ツリーオブジェクトになります、配列)からJSONデータストリーム

関連する問題