Mal wieder ein Problem von mir. 
Und zwar, wenn ich Daten vom Server via Socket lesen, kann es natürlich sein, das irgendwie etwas dazwischen kommt. Als Beispiel einfach die Nachricht, das eine neue PM oder so eingegangen ist. An sich ja kein Problem, und sollte eigendlich auch so sein, aber wenn etwas lade, und dafür eine Schleife einsetze, ist sowas natürlich nicht gut. (Ich weiß, Textanfänge sind nicht so mein Ding.)
Ich kann nicht in jeder Ladeschleife sämtliche Daten die möglicherweiße dazwischenkommen könnten handlen, da der Code dann unlesbar wäre. Deshalb war meine Idee, einen Befehl, der nichts mit der momentanen Schleife zu tun hat, wieder im Stream zurückzuschreiben. Dafür habe einen PushbackReader genommen. Allerdings fliegt mir bei jedem unread-Vorgang eine Excepiton:
Mein Code:
Anfangs habe ich das Array des String als eins übergeben, hat aber keinen Unterschied gegeben.
In der JavaDoc steht:
Allerdings habe ich nicht herausgefunden, wie man die Größe des Buffers ändert, und Google will mir auch nichts wirklich brauchbares ausspucken. :noe:
Ach ja, der Reader der benutzt wird ist ein BufferedReader -> InputStreamReader.
Edit: Ach ja, mit den Konstruktor die Größe zu ändern habe ich schon versucht, hat nichts gebracht.
Und zwar, wenn ich Daten vom Server via Socket lesen, kann es natürlich sein, das irgendwie etwas dazwischen kommt. Als Beispiel einfach die Nachricht, das eine neue PM oder so eingegangen ist. An sich ja kein Problem, und sollte eigendlich auch so sein, aber wenn etwas lade, und dafür eine Schleife einsetze, ist sowas natürlich nicht gut. (Ich weiß, Textanfänge sind nicht so mein Ding.)
Ich kann nicht in jeder Ladeschleife sämtliche Daten die möglicherweiße dazwischenkommen könnten handlen, da der Code dann unlesbar wäre. Deshalb war meine Idee, einen Befehl, der nichts mit der momentanen Schleife zu tun hat, wieder im Stream zurückzuschreiben. Dafür habe einen PushbackReader genommen. Allerdings fliegt mir bei jedem unread-Vorgang eine Excepiton:
Code:
java.io.IOException: Pushback buffer overflow
at java.io.PushbackReader.unread(Unknown Source)
at java.io.PushbackReader.unread(Unknown Source)
at at.kai.applet.Command.pushBack(Command.java:276)
at at.kai.applet.game.planetView.BuildPlanetView.readBuildings(BuildPlanetView.java:99)
at at.kai.applet.game.planetView.BuildPlanetView.build(BuildPlanetView.java:78)
at at.kai.applet.game.spaceView.planet.PlanetInfoFrame$1$1.run(PlanetInfoFrame.java:145)
Mein Code:
Anfangs habe ich das Array des String als eins übergeben, hat aber keinen Unterschied gegeben.
Java:
/**
* Push back this command into inputstream of socket.
* @param socket The socket to push command into.
*/
public synchronized void pushBack(Socket socket)
{
Reader reader = getReader(socket);
PushbackReader pushbackReader = new PushbackReader(reader);
try
{
char[] c = toString().toCharArray();
for(char c2:c)
pushbackReader.unread(c2);
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
pushbackReader.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
In der JavaDoc steht:
Code:
Throws:
IOException - If there is insufficient room in the pushback buffer, or if some other I/O error occurs
Allerdings habe ich nicht herausgefunden, wie man die Größe des Buffers ändert, und Google will mir auch nichts wirklich brauchbares ausspucken. :noe:
Ach ja, der Reader der benutzt wird ist ein BufferedReader -> InputStreamReader.
Edit: Ach ja, mit den Konstruktor die Größe zu ändern habe ich schon versucht, hat nichts gebracht.
Zuletzt bearbeitet: