我正在编写一个音乐播放器和歌词查找程序。截至目前,每次它具有读取每个音乐文件检索ID3标签的程序加载找到歌手名,歌曲名等,当读取超过两文件的更多,过程中提取ID3标签是非常时期-consuming。我希望能够将ID3信息保存到程序的私有数据目录中,而不是每次运行程序时都读取每个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;
}
如您所见,我需要跟踪一些字符串,两个整数和一个位图。可有人告诉我如何将一个阵列 或的ArrayList这些保存到文件中的设置,比如,名为“music_info.sav”或类似的规定?另外,如何检查此文件是否存在(如果不存在,则将文件创建为空)?
答案 0 :(得分:4)
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/
答案 1 :(得分:2)
尝试使用SQLite数据库存储此信息,而不是滚动自己的文件序列化。请参阅http://developer.android.com/guide/topics/data/data-storage.html,看看能否实现这一目标。