Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将自定义对象写入和读取到android文件_Android_File_Object - Fatal编程技术网

将自定义对象写入和读取到android文件

将自定义对象写入和读取到android文件,android,file,object,Android,File,Object,我有以下问题。我正在设计手写应用程序。 我不知道如何将我的对象(LogInfo)写入和读取到文件中。我知道我应该重写写和读方法,但我仍然不知道如何做。有人能给我一个明确的答案吗 我的班级如下: import java.io.IOException; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.LinkedList; impo

我有以下问题。我正在设计手写应用程序。 我不知道如何将我的对象(LogInfo)写入和读取到文件中。我知道我应该重写写和读方法,但我仍然不知道如何做。有人能给我一个明确的答案吗

我的班级如下:

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);
        }
    }
}
import java.io.IOException;
导入java.io.ObjectOutputStream;
导入java.io.Serializable;
导入java.util.ArrayList;
导入java.util.LinkedList;
导入java.util.List;
导入android.graphics.Point;
公共类LogInfo实现了可序列化{
/**
* 
*/
私有静态最终长serialVersionUID=-5777674941129067422L;
临时公共静态列表笔划;
临时公共静态列表代码;
公共登录信息()
{
笔划=新的ArrayList();
代码=新的LinkedList();
}
私有同步的void writeObject(ObjectOutputStream流)引发IOException{
stream.defaultWriteObject();
//stream.writeInt(strokes.size());
//点[]点[]点射线;

//对于(int i=0;i,因为点是不可序列化的。您可以有一个带有x&y的自定义“点”类和一个从中派生的瞬态点。这样,您可以使用默认的readObject和writeObject


我想我已经找到了解决办法

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);
    }
}
private void writeObject(ObjectOutputStream流)引发IOException{
stream.defaultWriteObject();
stream.writeInt(strokes.size());
点[][]点阵列=空;
对于(int i=0;i

它对我来说工作得很好。

我认为Point类是不可序列化的。而且,当我使用默认实现时,写入文件的唯一信息是类路径和一些随机字符(????com.myapp.LogInfo??f@Stbxp)这肯定不是它应该包含的信息。为什么有一个类名写入文件?没有人知道答案?:(抱歉,没有看到重点,是的,它不可序列化,更新了我的答案