2011-07-27 5 views
3

나는 음악 플레이어이자 가사 찾기 프로그램을 만들고있다. 현재 프로그램이로드 될 때마다 각 음악 파일을 읽고 ID3 태그를 검색하여 아티스트 이름, 노래 이름 등을 찾아야합니다. 몇 개 이상의 파일을 읽을 때 ID3 태그를 추출하는 프로세스는 매우 시간이 오래 걸립니다 -태워 버리는. 프로그램이 실행될 때마다 각 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; 
} 

여기서 알 수 있듯이 일부 String, 2 개의 int 및 Bitmap을 추적해야합니다. 누군가 내게 배열 또는 ArrayList을 파일, 말하자면 "music_info.sav"또는 그 라인을 따라 저장하는 방법을 보여줄 수 있습니까? 또한이 파일이 존재하는지 여부를 어떻게 확인할 수 있습니까 (그렇지 않은 경우 파일을 비어있게 만드십시오)?

답변

2

파일 직렬화를 롤링하는 대신이 정보를 저장하기 위해 SQLLite 데이터베이스를 사용해보십시오. http://developer.android.com/guide/topics/data/data-storage.html을 보시고 효과가 있는지 확인하십시오.

+1

sqlite 데이터베이스를 만들고 해당 필드를 열로 저장하십시오. 이것은 빠른 액세스뿐만 아니라 정렬/검색 능력을 허용합니다. – dontocsata

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(); 

읽고 씁니다.

편집

나는 비트 맵 개체에 대한 확실하지 않다. 독자적인 readObject() 및 writeObject() 메서드를 롤업해야 할 수도 있습니다.

다음은 비트 맵을 직렬화 및 비 직렬화하는 링크입니다.

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

+0

비트 맵이 그런 ​​식으로 직렬화됩니까? 그것은 Serializable을 구현하지 않습니다. – dontocsata

+0

@dontoscata - 네 말이 맞아. 비트 맵 객체를 알지 못했습니다. – Kal

+0

이것은 원래 어떻게하려고했는지입니다. 나는 아직도 혼란 스러웠다. 나는 2 개의 질문을 가지고있다 ... 1. 당신이 그것을하는 방식으로, 파일이 존재해야한다. 파일이 없으면 어떻게 만듭니 까? ObjectInputStream을 만들고 Exception을 잡으려고합니다. 예외가 잡히면 파일을 만듭니다 (그러나이 빈 파일을 만드는 방법을 모르겠습니다). 2.이 메소드는 ObjectInput/OutputStream 함수를 어떻게 변경합니까? writeObject 및 readObject를 언제 어디에서 호출 할 지 모르겠습니다. – jas7457

관련 문제