Java, vänta tills det finns data på InputStream

Permalänk
Medlem

Java, vänta tills det finns data på InputStream

Tja!

Jag håller på och testar lite TCP med Java. Problemet jag stött på är hur jag ska göra för att min InputStream ska vänta på att det finns data att läsa in innan den går vidare och försöker läsa in objektet jag skickat. Jag har nu lagt en while-loop som kollar 10ggr i sekunden ifall det finns något i streamen. Men det känns inte som att man ska behöva göra det?

Det fungerar fint och jag kan komma åt informationen i Incident-objektet men vill ju att det ska vara gjort på rätt sätt..

Så hur borde jag göra?

**Sry att koden inte är kommenterad men tror ni förstår ändå!**

try { System.out.println("Connecting to " + localSettings.getServerAdress() + " on port " + localSettings.getServerPort()); Socket client = new Socket(localSettings.getServerAdress(), localSettings.getServerPort()); System.out.println("Just connected to " + client.getRemoteSocketAddress()); InputStream inFromServer = client.getInputStream(); while(inFromServer.available() == 0) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } ObjectInputStream in = new ObjectInputStream(inFromServer); Incident incident = null; try { Object incidentTmp = (Incident) in.readObject(); incident = (Incident) incidentTmp; } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } client.close(); } catch(IOException e) { e.printStackTrace(); }

Visa signatur

Burk Nr.1 : Asus P8Z68 V-Pro | i7 2600k @ 4,4 | EVGA GTX780 Classified | Corsair Vengeance 8GB DDR3 1600Mhz | Corsair Obsidian 650D | Corsair TX650M | Corsair H100

Burk Nr.2 : MSI P35 Neo2 | Core 2 Duo E6850 @ 3,2Ghz | Powercolor Radeon HD5850 1GB | Corsiar Twin2X 6400 2x2GB | Corsair 550W

Permalänk

Vet inte om jag förstått ditt problem korrekt, men svaret kan finnas här:

http://stackoverflow.com/questions/611760/java-inputstream-re...

Visa signatur

○ Citera

Permalänk
Medlem

Jo jag har ju googlat en del och även läst det där tidigare, men jag har bara inte lyckats förstå hur det faktiskt ska göras, klurigt..

Visa signatur

Burk Nr.1 : Asus P8Z68 V-Pro | i7 2600k @ 4,4 | EVGA GTX780 Classified | Corsair Vengeance 8GB DDR3 1600Mhz | Corsair Obsidian 650D | Corsair TX650M | Corsair H100

Burk Nr.2 : MSI P35 Neo2 | Core 2 Duo E6850 @ 3,2Ghz | Powercolor Radeon HD5850 1GB | Corsiar Twin2X 6400 2x2GB | Corsair 550W

Permalänk
Hedersmedlem
Skrivet av miFFhoe:

Jo jag har ju googlat en del och även läst det där tidigare, men jag har bara inte lyckats förstå hur det faktiskt ska göras, klurigt..

Blockerar den inte om det inte finns något att läsa?

InputStream inFromServer = client.getInputStream(); ObjectInputStream in = new ObjectInputStream(inFromServer); Incident incident = null; try { Object incidentTmp = (Incident) in.readObject(); incident = (Incident) incidentTmp; } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }

Permalänk
Medlem

Det skumma är att nu verkar den blockera, den gjorde inte det tidigare, då försökte den läsa in något jag inte skickat och jag fick EOF. Men nu verkar det fungera, mystiskt

Visa signatur

Burk Nr.1 : Asus P8Z68 V-Pro | i7 2600k @ 4,4 | EVGA GTX780 Classified | Corsair Vengeance 8GB DDR3 1600Mhz | Corsair Obsidian 650D | Corsair TX650M | Corsair H100

Burk Nr.2 : MSI P35 Neo2 | Core 2 Duo E6850 @ 3,2Ghz | Powercolor Radeon HD5850 1GB | Corsiar Twin2X 6400 2x2GB | Corsair 550W