Bada Bung
- Forum-Beiträge: 5
29.01.2014, 13:19:47 via Website
29.01.2014 13:19:47 via Website
Hallo Leute und zwar folgendes Szenario:
Ich habe einen kleinen "Server" geschrieben, der regelmäßig diverse Strings in ein Bytearray (zwischen 1 und 1024 Byte) schreibt.
Dieses Bytearray wird in einen Stream geschrieben und dieser soll von meinem Client (Android) ausgelesen werden.
Beim testen hat das so halbwegs geklappt. Wenn ich aber um die 1024 Byte schreibe kam es häufiger vor, dass der String in mehrere Teile aufgeteilt wurde.
Als Grund habe ich eine Funktion ausgemacht, welche das auslesen des Streams "unterbricht". Jetzt bin ich gerade daran, den Stream solange auszulesen, bis alle Byte abgespeichert wurden. Damit die "ReadStream" Methode nicht unterbrochen werden kann. Aber irgendwie klappt das nicht.
Hat jemand hierzu ein Tutorial oder sehr gute Erklärung (auch für Dummies )?
Anbei meine aktuelle Funktion:
Ich habe einen kleinen "Server" geschrieben, der regelmäßig diverse Strings in ein Bytearray (zwischen 1 und 1024 Byte) schreibt.
Dieses Bytearray wird in einen Stream geschrieben und dieser soll von meinem Client (Android) ausgelesen werden.
Beim testen hat das so halbwegs geklappt. Wenn ich aber um die 1024 Byte schreibe kam es häufiger vor, dass der String in mehrere Teile aufgeteilt wurde.
Als Grund habe ich eine Funktion ausgemacht, welche das auslesen des Streams "unterbricht". Jetzt bin ich gerade daran, den Stream solange auszulesen, bis alle Byte abgespeichert wurden. Damit die "ReadStream" Methode nicht unterbrochen werden kann. Aber irgendwie klappt das nicht.
Hat jemand hierzu ein Tutorial oder sehr gute Erklärung (auch für Dummies )?
Anbei meine aktuelle Funktion:
1public boolean readFromStream()
2{
3 byte[] receivedByteArray = new byte[1024];
4
5 sOut = null;
6
7 try
8 {
9 int numberOfBytesToRead = mmInStream.read(receivedByteArray);
10 Log.d(TAG, "Bytes im Stream: " + numberOfBytesToRead);
11
12 int countTheReadLoops = 0;
13
14 while (numberOfBytesToRead > 0)
15 {
16 Arrays.fill(receivedByteArray, (byte) 0); // clear array from previous read
17 int numberOfReadedBytes = mmInStream.read(receivedByteArray);
18 Log.d(TAG, "LOGGFILE 1");
19
20 if (numberOfReadedBytes > 0)
21 {
22 if ( null != sOut )
23 {
24 sOut.concat( new String(receivedByteArray) );
25 Log.d(TAG, "LOGGFILE 2.1");
26 }
27
28 else
29 {
30 sOut = new String(receivedByteArray);
31 Log.d(TAG, "LOGGFILE 2.2");
32 }
33
34 numberOfBytesToRead -= numberOfReadedBytes;
35 countTheReadLoops++;
36 Log.d(TAG, "LOGGFILE 3");
37 }
38 }
39
40 Log.d(TAG, "Lesen vom Stream ok - Durchläufe: " + countTheReadLoops);
41 return true;
42 }
2{
3 byte[] receivedByteArray = new byte[1024];
4
5 sOut = null;
6
7 try
8 {
9 int numberOfBytesToRead = mmInStream.read(receivedByteArray);
10 Log.d(TAG, "Bytes im Stream: " + numberOfBytesToRead);
11
12 int countTheReadLoops = 0;
13
14 while (numberOfBytesToRead > 0)
15 {
16 Arrays.fill(receivedByteArray, (byte) 0); // clear array from previous read
17 int numberOfReadedBytes = mmInStream.read(receivedByteArray);
18 Log.d(TAG, "LOGGFILE 1");
19
20 if (numberOfReadedBytes > 0)
21 {
22 if ( null != sOut )
23 {
24 sOut.concat( new String(receivedByteArray) );
25 Log.d(TAG, "LOGGFILE 2.1");
26 }
27
28 else
29 {
30 sOut = new String(receivedByteArray);
31 Log.d(TAG, "LOGGFILE 2.2");
32 }
33
34 numberOfBytesToRead -= numberOfReadedBytes;
35 countTheReadLoops++;
36 Log.d(TAG, "LOGGFILE 3");
37 }
38 }
39
40 Log.d(TAG, "Lesen vom Stream ok - Durchläufe: " + countTheReadLoops);
41 return true;
42 }
— geändert am 29.01.2014, 13:22:58
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.