Problemer med InputStream fra web (http)
Hej,Jeg er igang med at lave en MP3 afspiller der er kodet som en applet. Problemet er når jeg prøver at indlæse en Mp3 fil, for at læse ID3 tags, så kan jeg ikke læse hele InputStream'en...
Afspillning af selve filen går fint!
Jeg har lavet en lille test code der beskriver mit problem. Hvis jeg henter filen via file:// er der ingen problemer, men hvis jeg henter filen via http:// så funker det ikke...
Jeg kan ikke bruge file:// til noget da programmet er kodet som en applet og applets har ikke rettigheder til at bruge file:// (security exception).
Mit gæt er at når man bruger http:// så bliver kun en lille del af filen indlæst i bufferet (se output) og resten bliver hentet "as needed". Er der nogen måde man kan tvinge InputStream til at hente det hele eller kan man gøre noget andet?
PS: Har prøvet at bruge en BufferedInputStream samme resultat...
Test code:
import java.io.*;
import java.net.*;
public class Mp3FileInfo{
public static void main(String[] args){
try{
Mp3FileInfo mp3 = new Mp3FileInfo();
ID3Tag tag = mp3.readTag("file://C:\\USERS\\Programmer\\Tomcat5.0\\webapps\\Mp3Juke\\files\\TheWayWeTalk.mp3");
System.out.println(tag.getTitle());
ID3Tag tag2 = mp3.readTag("http://localhost:8080/Mp3Juke/files/TheWayWeTalk.mp3");
System.out.println(tag2.getTitle());
}catch(IOException ioe){
System.out.println(ioe.getMessage());
}
}
public ID3Tag readTag(String inputfile) throws IOException {
URL mp3 = new URL(inputfile);
ID3Tag tag = null;
InputStream in = mp3.openStream();
BufferedInputStream buffer = new BufferedInputStream(in);
System.out.println("available: " + buffer.available());
if(buffer.available() > 128) {
buffer.skip(in.available()-128);
byte[] tagBytes = new byte[128];
buffer.read(tagBytes);
tag = new ID3Tag (tagBytes);
return tag;
}
return null;
}
}
output:
available: 2187638
The Way We Talk
available: 2666
(tom linie)
På forhånd tak,
delley