java - 将类保存到文件中?

标签 java android serialization

我正在编写一个程序,它是一个音乐播放器和一个歌词查找器。截至目前,程序每次加载时都必须读取每个音乐文件并检索 ID3 标签以查找艺术家姓名、歌曲名称等。当读取多个文件时,提取 ID3 标签的过程非常耗时-消耗。我希望能够将 ID3 信息保存到程序的私有(private)数据目录中,而不是每次运行程序时读取每个 ID3 标签。

我对序列化和保存/加载这样的东西感到困惑。我猜我应该使用 FileOutput/InputStreams 或 ObjectOutput/InputStreams 来实现这一点,但我无法掌握它们。有人可以帮助我并告诉我如何正确保存和加载我的“歌曲”类吗?以下是我需要能够保存的变量。

public class Song implements Serializable
{
    private int index = 0, trackLength = 0;
    private Bitmap albumArtwork = null;
    private String toString, name, trackNumber, artist, album, lyrics, fileName, releaseDate;
}

如您所见,我需要跟踪一些字符串、两个整数和一个位图。有人可以告诉我如何将其中的 arrayArrayList 保存到一个文件中,例如名为“music_info.sav”或类似的文件吗?另外,如何检查该文件是否存在(如果不存在,则将该文件创建为空)?

最佳答案

    ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("song.ser"));
    out.writeObject(yourArrayList);
    out.flush();
    out.close();

    ObjectInputStream in = new ObjectInputStream(new FileInputStream("song.ser"));
    ArrayList<Song> myArrayList = (ArrayList<Song>) in.readObject();
    in.close();

阅读。

编辑

我不确定 Bitmap 对象。您可能必须推出自己的 readObject() 和 writeObject() 方法。

private void writeObject(java.io.ObjectOutputStream out)
private void readObject(java.io.ObjectInputStream in)

这是有关序列化和反序列化位图的链接。

http://www.johnwordsworth.com/2011/06/serializing-and-de-serializing-android-graphics-bitmap/

关于java - 将类保存到文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6850589/

相关文章:

c# - 序列化/反序列化对象 - 字段顺序很重要?

java - 用一些已知的概率,设置一个变量的值

java - MALLET 主题建模 : Inconsistent Estimations

Android Studio 无法在设备上运行项目?

android - 带有不透明导航栏的深色文本透明状态栏

c - 在 C 中序列化字符串

c++ - 如何调试boost archive异常输入流错误

java - struts2拦截器堆栈

java - App Engine Java Servlet 中收到 OAuthRequestException

android - 为什么我的手机无法访问计算机网络?