Quellcode von Homepage wird nicht komplett eingelesen

Status
Nicht offen für weitere Antworten.

AlexDozer

Aktives Mitglied
Hallo miteinander,

ich hab das Problem das eine Website nicht komplett eingelesen wird. Und ich finde den Fehler nicht.
Code:
	URL url;
	
	private InputStream in;
	private int amountbyte = 100000;
		
	public String getUrlData(String uri, String get)
	{
		byte[] site = new byte[amountbyte];
		int zeichen;
		try 
		{
			url = new URL(uri+get);   //URL erstellen
			in = url.openStream();    //Inputstream öffnen
			
			//Zeichen einlesen
			zeichen = in.read();
			
			if (zeichen == -1)
				return "";
			
			//Doctype überspringen
			//while (in.read() != '>')  
				;			
			
			//Quelltext einlesen
			in.read(site,0,amountbyte);
				
			
		}
		catch (Exception e)
		{
			JOptionPane.showMessageDialog(CReferenz.main, "Kein Internet verfügbar");
	   }
		
					
		System.out.println(new String(site));
		return new String(site).trim();

Wenn ich das ganze so betreibe ist danach in meinem String nur der Anfang vom Doctype
Code:
!DOCTYPE HTML PUBLIC "-//

Wenn ich die Schleife benutze, welche ausgeklammert ist, um den Doctype zu überspringen komme ich bis zur Zeile 288 von 3001 Zeilen. Ich brauch aber alle Zeilen. An der Größe vom byte-Array liegt es nicht!

Jemand eine Idee?


Gruß Alex
 

Murray

Top Contributor
InputStream.read liest maximal soviele Bytes, wie durch den dritten Parameter vorgegeben wird. Wieviele Bytes tatsächlich gelesen wurden, wird als Rückgabewert geliefert. Man kann also nicht davon ausgehen, dass durch eine Aufruf alle verfügbaren Daten komplett gelesen werden.
 

AlexDozer

Aktives Mitglied
Hallo Murray,

ich hab es jetzt so gelöst:

Code:
while(true)
			{
				byte [] site = new byte[100000];
				
				if (in.read(side, 0, 100000) == -1)
					break;
				
				sitecomplete += new String(site).trim();
			}

Wahrscheinlich nicht die beste Lösung. Komischerweise muss ich trotz dem trim() beim Hinzufügen zum String (Zeile 8) bei der Rückgabe auch nochmal ein trim() machen:

Code:
return sitecomplete.trim();

Wenn ich ein trim() weglasse werden da irgendwelche Nullen mit zurückgegeben. Jemand ne Ahnung warum?

Gruß Alex
 
S

SlaterB

Gast
new String(site) ist schlecht,
wenn die Datei kleiner als 100.000 ist, dann ist das Array am Ende mit char 0 gefüllt und diese übernimmst du in den String,

noch gefährlicher ist es, wenn die Datei z.B. eine Länge von 120.000 hat,
dann hast du im ersten Schleifendurchlauf 100.000 gültige Zeichen, ok,
im zweiten Durchlauf werden die ersten 20.000 Zeichen des Arrays neu beschrieben,
mit new String(site) erhälst du dann aber einen String mit den 20.000 neuen Zeichen sowie 80.000 weiteren, die immer noch im Array drin sind!, also doppelten Text

deswegen den Rückgabewert von in.read(side, 0, 100000), die Anzahl der Zeichen, im Konstruktor von String mit übergeben,
schau doch einfach nach Beispielen im Internet..
oder hier:
http://www.java-forum.org/de/viewtopic.php?t=74379


mit trim() hat das alles aber weniger zu tun bzw. ein trim() in der while-Schleife sollte genügen solange du diesen Fehler nicht ausbaust,

dass ein zweites trim() ganz am Ende noch eine Änderung bewirkt kann ich mir nicht vorstellen
 

ARadauer

Top Contributor
warum ließt du eigentlich zeichenweise?

Code:
 String line = null;
      StringBuffer buffer = new StringBuffer();
      try 
      { 
         url = new URL(uri+get);   //URL erstellen 
         in = url.openStream();    //Inputstream öffnen 
          
         BufferedReader reader = new BufferedReader(InputStreamReader(in));
         
         while((line=reader.readLine())!=null)
            buffer.append(line);
             
          
      } 
      catch (Exception e) 
      { 
         JOptionPane.showMessageDialog(CReferenz.main, "Kein Internet verfügbar"); 
      } 
       
                
      System.out.println(buffer.toString()); 
      return buffer.toString().trim();
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Quellcode einer HTML Seite erhalten Netzwerkprogrammierung 2
O HTTP Einloggen auf einer Homepage Netzwerkprogrammierung 8
M Homepage ansteuerung Netzwerkprogrammierung 9
H Kartenspiel als Multimedia Applikation in Homepage einbinden Netzwerkprogrammierung 20
A Bei FTP Übertragung wird Datei nicht komplett übertragen Netzwerkprogrammierung 2
OnDemand JMS Messages wird gecached Netzwerkprogrammierung 2
P RMI stub wird nicht gefunden Netzwerkprogrammierung 8
I Socket ObjectOutputStream-Socket: Objekt wird falsch übertragen Netzwerkprogrammierung 2
M com.google.gson wird nicht erkannt Netzwerkprogrammierung 2
F Website parsen, die mit javascript zusammengebaut wird Netzwerkprogrammierung 1
P Socket Server übertragung wird immer langsamer Netzwerkprogrammierung 4
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
M Client sendet nur, wenn das Socket geschlossen wird Netzwerkprogrammierung 53
L Server anpingen (Pingzeit) ?? Pingzeit wird nicht verändert Netzwerkprogrammierung 6
M JSP wird im gesamten Projekt nicht neugeladen Netzwerkprogrammierung 3
K Socket InputStream wird nicht erzeugt Netzwerkprogrammierung 4
R Socket SSL-Connect in Servlet - keystore wird nicht gefunden Netzwerkprogrammierung 2
S anderer Rechner wird nicht gefunden Netzwerkprogrammierung 20
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
X Änderung des Objekts wird nicht serialisiert Netzwerkprogrammierung 9
M Socket TCP keep alive Exception wird nicht ausgelöst Netzwerkprogrammierung 11
F getSource Methode wird als Bot erkannt Netzwerkprogrammierung 8
Dit_ RMI setSoTimeout wird ignoriert? Netzwerkprogrammierung 3
lumo String[] wird zu null bei Serialisierung Netzwerkprogrammierung 8
J method = PUT, aber ausgeführt wird doGet...? Netzwerkprogrammierung 4
K Was wird genau per Telnet verschickt ? Netzwerkprogrammierung 5
M Dateidownload per FTP wird immer langsamer und bleibt dann stehen Netzwerkprogrammierung 3
J BufferedReader.ready() wird nicht true Netzwerkprogrammierung 10
A Socket BufferedReader.readLine() blockiert bis ein im Socket OutputStream was gesendet wird ... Netzwerkprogrammierung 9
C RMI Klasse wird unter falschem Pfad gesucht Netzwerkprogrammierung 4
B Server-Programm wird durch "read" beendet Netzwerkprogrammierung 8
A Socket Client Server Connection wird aufgebaut aber keine daten geschickt. Netzwerkprogrammierung 5
N Socket Verbindung wird immer verweigert Netzwerkprogrammierung 5
K HTTP-Anfrage an einen Server wird nicht beantwortet Netzwerkprogrammierung 3
M URL Handler wird nicht gefunden Netzwerkprogrammierung 6
L SSL Verbindung aber Server wird erst im Programm festgelegt Netzwerkprogrammierung 4
L Https Verbindung wird aus jar heraus nicht aufgebaut Netzwerkprogrammierung 12
C Download-Fortschritt wird falsch angezeigt. Netzwerkprogrammierung 2
V RMI: code wird einfach übergangen ? Netzwerkprogrammierung 3
A FileChannel+SocketChannel:Datei wird nur teilweise übertrage Netzwerkprogrammierung 4
F Stream wird als Char übertragen. Char -> in String umwand Netzwerkprogrammierung 5
L RMI-Funktion wird lokal ausgeführt Netzwerkprogrammierung 12
A RMI: Wo wird die Methode ausgeführt? Netzwerkprogrammierung 9
P JNDI LDAP-SSL Verbindung, Zertifikat wird nicht angezeigt ? Netzwerkprogrammierung 2
A JavaMail Problem - Nachricht wird nicht versendet ? Netzwerkprogrammierung 9
T finlalize Methode vom Server wird nicht aufgerufen Netzwerkprogrammierung 4
B Socket wird nicht richtig geschlossen Netzwerkprogrammierung 2
K mapSystemException wird geworfen Netzwerkprogrammierung 2
L Attachment wird nicht angezeigt in der Email Netzwerkprogrammierung 3
P RMI - meine Stub-Class wird nicht gefunden Netzwerkprogrammierung 9
G Socket wird nach Portscann geschlossen Netzwerkprogrammierung 2
R Socket wird nicht ausgeführt Netzwerkprogrammierung 6

Ähnliche Java Themen


Oben