2016-05-10 8 views
2

Ich verwende java.net.URL.openStream(), um auf eine HTTPS-Ressource zuzugreifen. Der zurückgegebene Stream ist für einige URLs unvollständig: Für das Beispiel unten ergibt sich eine Byte-Datei von 1.105.724 Byte, während dieselbe URL, auf die von einem Browser aus zugegriffen wird, eine 5.755.858 Byte-Datei liefert (selbst wenn "Content-Encoding" deaktiviert wird).Unvollständig java.net.URL.openStream() stream

Und es wirft nicht einmal eine Ausnahme.

Was fehlt mir?

import static java.nio.file.Files.copy; 

import java.io.IOException; 
import java.io.InputStream; 
import java.net.URL; 
import java.nio.file.Paths; 

public class Test { 
    public static void main(String... args) throws IOException { 
    try (final InputStream in = new URL(
     "https://upload.wikimedia.org/wikipedia/commons/9/95/Germany_%28orthographic_projection%29.svg").openStream()) { 
     copy(in, Paths.get("germany.svg")); 
    } 
    } 
} 

bearbeiten

ich diesen Code viele Male getestet haben (in verschiedenen Netzwerken, aber immer auf JRE 1.8.0_60/Mac OS X 10.11.4), und es ist manchmal plötzlich beginnen“zu Arbeit".

Wechseln zu einer anderen meiner problematischen URLs (z. B. "https://upload.wikimedia.org/wikipedia/commons/c/ce/Andorra_in_Europe_%28zoomed%29.svg") ermöglicht es mir, das Problem zu reproduzieren.

Bedeutet dies, dass es sich um ein Serverproblem handelt? Ich habe es noch nie in einem Browser gesehen.

+1

Hmmm, wie hast du das 5.755.858 Byte-Datei messen? Das bekomme ich nicht, wenn ich die Datei manuell herunterlade und die Größe überprüfe. – Tunaki

+1

@Tunaki Ich bekomme die gleiche Größe wie OP, wenn ich es manuell aus dem Navigator oder aus der Locke –

+0

Funktioniert gut für mich ... Sind Sie sicher, Sie sind in einem stabilen Netzwerk? –

Antwort

-2

Es funktioniert gut.

Da andere ein Problem mit Ihrem Netzwerk vermuten, versuchen Sie, eine Verbindung zu einem anderen Netzwerk herzustellen.

package test; 

import java.io.InputStream; 
import java.net.URL; 
import java.nio.file.Files; 
import java.nio.file.Path; 
import java.nio.file.Paths; 
import java.nio.file.StandardCopyOption; 

public class TestMain2 { 
    public static void main(String[] args) { 
     System.out.println("Started"); 

     try (final InputStream in = new URL(
       "https://upload.wikimedia.org/wikipedia/commons/9/95/Germany_%28orthographic_projection%29.svg") 
         .openStream()) { 

      Path outputFile = Paths.get("test.svg"); 

      Files.copy(in, outputFile, StandardCopyOption.REPLACE_EXISTING); 

      System.out.println("Output file size : " + outputFile.toFile().length()); 

      System.out.println("Finished"); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 

Ausgabe

Started 
Output file size : 5755858 
Finished 
+0

Wenn es nur ein Netzwerkproblem ist, wie erklären Sie, dass es über einen Browser funktioniert? –

+1

Wenn es funktioniert, stimme bitte einfach ab, um als nicht reproduzierbar zu schließen. Die Antwort "es funktioniert für mich" ist nicht hilfreich. Und es kann ein Problem mit Ihrem Netzwerk geben, das nicht schlüssig ist und nur eine Vermutung ist. –

+0

@SotiriosDelimanolis, Julien hat keinen Code für die Kopie gepostet, das habe ich in die Antwort aufgenommen, das Problem könnte auch da sein. – 11thdimension

Verwandte Themen