Ich versuche lokale mp3-Dateien zu streamen. Das Lied, das ich gerade teste, ist 5: 33s lang. In Chrome und Edge spielt das Lied knapp 4 Minuten vor dem Anschlag.StreamingOutput - EofException vor dem Stream fertig geschrieben
Hier ist mein Service
@Path ("clips")
public class ClipService {
@GET
@Path(...)
@Produces("audio/mp3")
public Response streamAudio() {
Clip clip = ...
StreamingOutput output = buildStreamingOutput(clip);
return Response.ok(output).header(HttpHeaders.CONTENT_LENGTH, clip.getLength()).build();
}
private StreamingOutput buildStreamingOutput(Clip clip)
throws Exception {
return new StreamingOutput() {
@Override
public void write(final OutputStream out)
throws IOException, WebApplicationException {
byte[] buffer = new byte[1024];
int bytesRead;
try (InputStream in = clip.getInputStream()) {
while ((bytesRead = in.read(buffer)) > 0) {
out.write(buffer, 0, bytesRead);
}
out.flush();
}
}
};
}
}
Der Clip Klasse
public class Clip {
private InputStream inputStream; // The file
private long length; // File.length()
Und der Fehler ich erhalte ...
SEVERE: An I/O error has occurred while writing a response message entity to the container output stream.
org.glassfish.jersey.server.internal.process.MappableException: org.eclipse.jetty.io.EofException
at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:92)
...
Caused by: org.eclipse.jetty.io.EofException
at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:200)
...
Caused by: java.io.IOException: An established connection was aborted by the software in your host machine
at sun.nio.ch.SocketDispatcher.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:51)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
at sun.nio.ch.IOUtil.write(IOUtil.java:51)
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471)
at org.eclipse.jetty.io.ChannelEndPoint.flush(ChannelEndPoint.java:178)
... 67 more
Ich habe versucht ServerProperties.OUTBOUND_CONTENT_LENGTH_BUFFER
-0 Einstellung in meine AppConfig ohne Erfolg.
Sie haben keine Informationen darüber, wer Sie abgelehnt hat, aber sehen Sie sich die Stack-Trace an. Die 'EofException' wurde durch die' IOException' verursacht, daher ist die 'IOException' hier das eigentliche Problem, also war meine Editierung korrekt und hilfreich, und deine Editierung meiner Editierung war nicht. Tu das nicht. Ich versuche dir zu helfen. – EJP
Ich werde zum Vorteil der Jetty-Entwickler hinzufügen, dass das Ende der Datei beim Lesen auftritt. Ein Ende der Datei zum Schreiben zu werfen ist lächerlich. Es wäre besser gewesen, die Ausnahme gar nicht zu verpacken oder gar nicht einzufangen. – EJP
Sie müssen aufhören zu raten und zu lesen beginnen. Ich habe sowohl den Grund und die Motivation für meine Bearbeitung klar angegeben, als auch was mit deinem Titel falsch war. "Mangel an Interpunktion" ist ein lächerlicher Grund, die gesamte Bearbeitung abzulehnen, die direkt von Ihrem Stack-Trace kopiert/eingefügt wurde. Wenn Sie nicht möchten, dass Ihre Frage von Personen beantwortet wird, die die zugrundeliegende "IOException" erklären können, gehen Sie richtig vor. Ich habe diesen Edit War den Moderatoren zur Kenntnis gebracht. – EJP