Problem mit url, inputStream und bytes beim Quellcode laden.

Status
Nicht offen für weitere Antworten.

savage

Mitglied
Hi =)

habe da ein Problem beim Quellcode laden. Mit diesem code hat es immer wunderbar geklappt, leider steht auf der Seite die ich lade inzwischen mehr und ich kann nicht mehr alles laden.

Code:
byte[] b = new byte[6000];

URL url = new URL (http:\\beispiel.de);

InputStream stream = url.openStream();

while (stream.read(b) != -1)
{
	quellcode = new String(b);
}

System.out.println(quellcode);

Ich habe schon oben die bytes geändert, das komische ist aber je höher ich oben die Zahl mache, desto weniger bekomme ich vom quelltext. Bzw ich bekomme nur noch das Ende des Quellcodes zu lesen. 🙁

EDIT: Ach der komplette Quellcode besteht jetzt aus 18209 Zeichen. =/ falls das irgendwie weiter hilft. (Habe es deshalb auch mit 18209 byte versucht. Oder kann man das nicht so einfach umrechnen?)
 
du liest in einer Schleife 10x 6000 bytes ein und überschreibst jeweils den vorherigen String,
nach der Schleife in Zeile 12 ist dann logischerweise nur noch der letzte Vorgang zu sehen,

wieviel da ist, hängt vom Verhältnis Buffer-Größe zu Dateigröße,
ist die Datei 2500 Bytes groß und der Buffer 1000 Bytes,
dann ließt du 1000 Bytes ein, 1500 bleiben übrig,
nochmal 1000 eingelesen, 500 bleiben übrig,
nochmal 500 eingelesen, fertig -> Ausgabe 500 Bytes

erhöhst du den Buffer nun auf 1200 Bytes sieht das ganze so aus:
1200 eingelesen, 1300 übrig,
1200 eingelesen, 100 übrig,
100 eingelesen, fertig -> Ausgabe 100 bytes

weniger, obwohl Buffer größer,

wenn der Buffer aber größer gleich der Datei ist, würde er irgendwann die gesamte Datei enthalten,
alternativ die Zwischenergebnisse NICHT löschen 😉


> Habe es deshalb auch mit 18209 byte versucht. Oder kann man das nicht so einfach umrechnen?

könnte gehen, ruhig auch großzügig auf 20.000 erhöhen,
aber eine allgemeine Lösung ist das nicht, die Datei könnte ja immer größer sein
 
Danke dir für die schnell Antwort.
Habe es jetzt mit 20000 versucht, leider zeigt er jetzt nur noch einen ganz kleinen Teil des Quellcodes an und füllt den Rest mit Leerzeichen. Bei 30000 und 40000 habe ich gar nichts mehr gesehen.

Ich setzte jetzt mal die Schleife weg.
 
was für eine Klammer? (edit: ok, nun steht da Schleife)
du brauchst übrigens den Rückgabewert von stream.read(b) und musst diese Zahl beim Konstruktor des Strings übergeben,
damit nur ein String mit den ersten 4968 Bytes vom 20000er Array erzeugt wird, falls nur 4968 Bytes gelesen und ins Array geschrieben wurden
 
Sorry fürs viele rumeditieren 😳
Bin etwas zappelig weil ich das immer sofort im Code ändern will und schreibe hier deshalb Texte die nicht das sagen was ich will. 😀

Habe es jetzt so und es geht:



Code:
byte[] b = new byte[20000];

URL url = new URL (http:\\beispiel.de);

InputStream stream = url.openStream();

stream.read(b);                          // Kann ich diese Zeilen auch zusammen schreiben?
                                                 // Mit quellcode = new String(stream.read(b)); oder sowas?
quellcode = new String(b);          // 

System.out.println(quellcode);

Es zeigt noch nicht den kompletten Quellcode an, aber ich erhöhe dann die bytes einfach.

Das mit dem Rückgabewert und die Übergabe an den Konstruktor verstehe ich nicht ganz. Habe die Texte in meinem Java Buch nicht gelesen und kenne daher die Fachausdrücke auch nicht so 😉
Ich lerne lieber aus den Codeschnipseln. Praxis finde ich 1000 mal besser.
 
http://www.google.de/search?hl=de&q=openStream+read+new+String&meta=

->

http://java.sun.com/developer/technicalArticles/ThirdParty/WebCrawler/WebCrawler.java
Code:
	    InputStream urlRobotStream = urlRobot.openStream();

	    // read in entire file
	    byte b[] = new byte[1000];
	    int numRead = urlRobotStream.read(b);
	    strCommands = new String(b, 0, numRead);
	    while (numRead != -1) {
		if (Thread.currentThread() != searchThread)
		    break;
		numRead = urlRobotStream.read(b);
		if (numRead != -1) {
		    String newCommands = new String(b, 0, numRead);
		    strCommands += newCommands;
		}
	    }
	    urlRobotStream.close();
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben