Java 具有较大大小但所有空值的对象列表
我正在遍历字符串(路径)列表,并使用文件(“路径”)打开这些文件(mp3)。然后,我获取元数据并在对象(歌曲)中设置该元数据的值。然后我将这首歌添加到一个列表中,并将其传递到一个序列化文件中 我的问题是,当我填充我的歌曲列表以发送并写入时,在调试中,它的大小为49K个对象,并且所有对象都为空。但是每个对象都有我设置的值。如果我尝试调整大小,我会得到一个空指针异常 以下是相关代码: Song类(相当标准…唯一关心的是可序列化的实现): 调用以填充歌曲和歌曲列表并传递要写入的列表:Java 具有较大大小但所有空值的对象列表,java,serialization,null,Java,Serialization,Null,我正在遍历字符串(路径)列表,并使用文件(“路径”)打开这些文件(mp3)。然后,我获取元数据并在对象(歌曲)中设置该元数据的值。然后我将这首歌添加到一个列表中,并将其传递到一个序列化文件中 我的问题是,当我填充我的歌曲列表以发送并写入时,在调试中,它的大小为49K个对象,并且所有对象都为空。但是每个对象都有我设置的值。如果我尝试调整大小,我会得到一个空指针异常 以下是相关代码: Song类(相当标准…唯一关心的是可序列化的实现): 调用以填充歌曲和歌曲列表并传递要写入的列表: public s
public static void savePopulatedList(){
List<Song> myList = populateFromFile();
SerialUtilities utilities = new SerialUtilities();
utilities.saveSerializedSongInfoFile(myList);
}
任何理解这一点的人,你能给我解释一下吗……最好是用fix:)。这些项目不是
null
。调试器正在向您显示以下内容:
1 = {Song@669} "null"
index = {ClassName@ObjectId} "Result of 'toString()'"
由于您的歌曲#toString
如下所示:
@Override
public String toString(){
StringBuilder sb = new StringBuilder();
sb.append("Values for this song:");
sb.append("\n\tArtist: " + artistName);
sb.append("\n\tTitle: " + songName);
sb.append("\n\tRelease Date: " + releaseDate);
sb.append("\n\tTrack Number: " + trackNumber);
sb.append("\n\tComposer: " + composer);
sb.append("\n\tPublisher: " + publisher);
sb.append("\n\tLength: " + length);
sb.append("\n");
System.out.println(sb.toString());
return null;
}
很清楚为什么它显示“null”toString
应该返回对象的字符串表示形式。您的实现只是打印这个表示,然后返回null
。您需要返回sb.toString()
:
Song#toString
正在返回null
?要展开@MadProgrammer comment,值不是null,您只需打印(为什么?)构建的字符串,然后返回null。数组值都显示为Song@669
不同的数字意味着您在数组中分配了不同的对象。显示宋的实现。toString
@Dima它已经在那里了…我明白了。嗯,它返回null
。您希望打印出什么内容???谢谢。我之前一直在使用Override toString()进行一些测试。我知道这会把事情搞得一团糟。
public void saveSerializedSongInfoFile (List<Song> sl) {
// List<Song> sortedSongList = SortSongList.sortSongBy(sl, SongComparator.Order.ARTIST);
System.out.println("Size of Song List To Be Written: " + s1.size() + "\n");
try (ObjectOutputStream objectOutputStream =
new ObjectOutputStream(new FileOutputStream(savePath))) {
objectOutputStream.writeObject(sl);
} catch (IOException e) {
e.printStackTrace();
}
}
songs = {ArrayList@511} size = 49783
listOfSongs = {ArrayList@512} size = 49782
0 = {Song@515} "null"
path = "m:\tunes\10,000 Maniacs\In My Tribe\01 - What's The Matter Here_.mp3"
songName = "What's The Matter Here?"
artistName = "10,000 Maniacs"
albumName = "In My Tribe"
releaseDate = "1987"
trackNumber = "1"
composer = "Natalie Merchant/Robert Buck"
genre = "Soft Rock"
length = "4:51"
publisher = "Elektra"
artistID = 1
albumID = 1
1 = {Song@669} "null"
2 = {Song@670} "null"
3 = {Song@671} "null"
4 = {Song@672} "null"
5 = {Song@673} "null"
6 = {Song@674} "null"
7 = {Song@675} "null"
8 = {Song@676} "null"
9 = {Song@677} "null"
10 = {Song@678} "null"
11 = {Song@679} "null"
12 = {Song@680} "null"
13 = {Song@681} "null"
14 = {Song@682} "null"
15 = {Song@683} "null"
16 = {Song@684} "null"
17 = {Song@685} "null"
18 = {Song@686} "null"
19 = {Song@687} "null"
20 = {Song@688} "null"
21 = {Song@689} "null"
22 = {Song@690} "null"
23 = {Song@691} "null"
24 = {Song@692} "null"
25 = {Song@693} "null"
26 = {Song@694} "null"
path = "m:\tunes\AC-DC\1 Studio albums\1974 High Voltage (Australian Editions) @320\02 - She's Got Balls.mp3"
songName = "She's Got Balls"
artistName = "AC/DC"
albumName = "High Voltage"
releaseDate = "1975"
trackNumber = "2"
composer = null
genre = "Hard Rock"
length = "4:48"
publisher = "Albert Productions"
artistID = 1
albumID = 1
27 = {Song@695} "null"
28 = {Song@696} "null"
29 = {Song@697} "null"
30 = {Song@698} "null"
31 = {Song@699} "null"
.......and this continues for the rest of the array.
1 = {Song@669} "null"
index = {ClassName@ObjectId} "Result of 'toString()'"
@Override
public String toString(){
StringBuilder sb = new StringBuilder();
sb.append("Values for this song:");
sb.append("\n\tArtist: " + artistName);
sb.append("\n\tTitle: " + songName);
sb.append("\n\tRelease Date: " + releaseDate);
sb.append("\n\tTrack Number: " + trackNumber);
sb.append("\n\tComposer: " + composer);
sb.append("\n\tPublisher: " + publisher);
sb.append("\n\tLength: " + length);
sb.append("\n");
System.out.println(sb.toString());
return null;
}
@Override
public String toString(){
//...
return sb.toString();
}