2013-05-09 2 views
0

다음과 같은 문제가 있습니다. 필기를위한 응용 프로그램을 디자인하고 있습니다. 내 Object (LogInfo)를 파일에 쓰고 읽는 법을 모르겠습니다. 쓰기 및 읽기 방법을 재정의해야한다는 것을 알고 있지만 어떻게해야하는지 아직 확신 할 수 없습니다. 아무도 내 질문에 명확한 대답을 줄 수 있습니까?파일에 사용자 정의 개체 쓰기 및 읽기 android

import java.io.IOException; 
import java.io.ObjectOutputStream; 
import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.LinkedList; 
import java.util.List; 

import android.graphics.Point; 

public class LogInfo implements Serializable{ 

    /** 
    * 
    */ 
    private static final long serialVersionUID = -5777674941129067422L; 
    transient public static List<Point[][]> strokes; 
    transient public static List<byte[]> codes; 

    public LogInfo() 
    { 
     strokes = new ArrayList<Point[][]>(); 
     codes = new LinkedList<byte[]>(); 
    } 

    private synchronized void writeObject(ObjectOutputStream stream) throws IOException { 
     stream.defaultWriteObject(); 
     //stream.writeInt(strokes.size()); 
     //Point[][] pointsArray; 
     //for (int i=0; i<strokes.size(); i++) 
     //{ 
     // pointsArray = ((Point[][])strokes.get(i)); 
     // for (int j = 0; j < pointsArray.length; j++) 
     //  for (int k = 0; k < pointsArray[j].length; k++) 
     //  { 
     //   stream.writeInt(pointsArray[j][k].x); 
     //   stream.writeInt(pointsArray[j][k].y); 
     //   //stream.writeObject(elementData[i]); 
     //  } 
     //} 
     stream.writeInt(codes.size()); 
     for (int i=0; i<codes.size(); i++) 
     { 
      stream.write(codes.get(i)); 
     } 
    } 

    private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException 
    { 
     stream.defaultReadObject(); 
     int codesSize = stream.readInt(); 
     for (int i=0; i<codesSize; i++) 
     { 
      byte[] buffer = null; 
      stream.read(buffer, 0, 3); 
      codes.add(buffer); 
     } 
    } 
} 

스트로크 포인트 형의 2 차원 배열을 포함하는 ArrayList를이다

코드의 배열 (IT 관련 획수 포인트에 해당)은 다음과 같이

내 클래스는 문자를 저장합니다 (3 바이트 = 1 문자)

따라서 2 획을 사용하여 "A"라고 쓰면 획 및 코드 크기는 2이고 코드에는 3 바이트로 작성된 문자 A가 포함됩니다.

누군가이 글을 어떻게 쓰고 읽을 수 있습니까?

답변

0

은 내가 해결책을 찾은 것 같아요.

private void writeObject(ObjectOutputStream stream) throws IOException { 
    stream.defaultWriteObject(); 
    stream.writeInt(strokes.size()); 
    Point[][] pointsArray = null; 
    for (int i = 0; i < strokes.size(); i++) 
    { 
     pointsArray = ((Point[][])strokes.get(i)); 
     stream.writeInt(pointsArray.length); 
     for (int j = 0; j < pointsArray.length; j++) 
     { 
      stream.writeInt(pointsArray[j].length); 
      for (int k = 0; k < pointsArray[j].length; k++) 
      { 
       stream.writeInt(pointsArray[j][k].x); 
       stream.writeInt(pointsArray[j][k].y); 
       //stream.writeObject(elementData[i]); 
      } 
     } 
    } 

    int size = codes.size(); 
    stream.writeInt(size); 
    for (int i = 0; i < size; i++) 
    { 
     stream.write(codes.get(i)); 
    } 
} 

private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException 
{ 
    stream.defaultReadObject(); 
    int strokesSize = stream.readInt(); 
    for (int i = 0; i < strokesSize; i++) 
    { 
     int arrayXSize = stream.readInt(); 
     Point[][] points = new Point[arrayXSize][]; 
     for (int j = 0; j < arrayXSize; j++) 
     { 
      int arrayYSize = stream.readInt(); 
      points[j] = new Point[arrayYSize]; 
      for (int k = 0; k < arrayYSize; k++) 
       points[j][k] = new Point(stream.readInt(), stream.readInt()); 
     } 
     strokes.add(points); 
    } 

    int codesSize = stream.readInt(); 
    for (int i = 0; i < codesSize; i++) 
    { 
     byte[] buffer = new byte[3]; 
     stream.read(buffer, 0, 3); 
     codes.add(buffer); 
    } 
} 

그것은 나를 위해 잘 작동합니다.

0

점은 직렬화되지 않기 때문에. 당신은 x & y와 그것으로부터 파생 된 일시적인 Point를 가진 커스텀 "포인트"클래스를 가질 수 있습니다. 그렇게하면 기본 readObject와 writeObject를 사용할 수 있습니다.

Check this out

+0

저는 Point 클래스가 Serializable이 아니라고 생각합니다. – Marek

+0

또한 기본 구현을 사용할 때 파일에 쓰여지는 유일한 정보는 클래스 경로와 일부 무작위 문자 (???? com.myapp.LogInfo ?? [email protected] xp)입니다.이 정보는 반드시 있어야하는 정보가 아닙니다. . 파일에 클래스 이름이 쓰여진 이유는 무엇입니까? – Marek

+0

아무도 대답을 모릅니다. : ( – Marek