Compact when NativeDaemonConnector hits buffer limit

If NativeDaemonConnector hits its buffer limit, it would truncate the
data and lose some information. This change compacts the buffer and then
retries to read the rest of the data.

Change-Id: I0d5fee097bdd6808212ef3ad6fb4abbc6310fd4a
This commit is contained in:
Kenny Root
2010-03-22 18:02:45 -07:00
parent f7791634a2
commit 07726310ae

View File

@@ -48,6 +48,8 @@ final class NativeDaemonConnector implements Runnable {
private String mSocket;
private INativeDaemonConnectorCallbacks mCallbacks;
private final int BUFFER_SIZE = 4096;
class ResponseCode {
public static final int ActionInitiated = 100;
@@ -100,13 +102,13 @@ final class NativeDaemonConnector implements Runnable {
InputStream inputStream = socket.getInputStream();
mOutputStream = socket.getOutputStream();
byte[] buffer = new byte[4096];
byte[] buffer = new byte[BUFFER_SIZE];
int start = 0;
while (true) {
int count = inputStream.read(buffer);
int count = inputStream.read(buffer, start, BUFFER_SIZE - start);
if (count < 0) break;
int start = 0;
for (int i = 0; i < count; i++) {
if (buffer[i] == 0) {
String event = new String(buffer, start, i - start);
@@ -139,6 +141,13 @@ final class NativeDaemonConnector implements Runnable {
start = i + 1;
}
}
if (start != count) {
final int remaining = BUFFER_SIZE - start;
System.arraycopy(buffer, start, buffer, 0, remaining);
start = remaining;
} else {
start = 0;
}
}
} catch (IOException ex) {
Slog.e(TAG, "Communications error", ex);