diff --git a/services/java/com/android/server/NativeDaemonConnector.java b/services/java/com/android/server/NativeDaemonConnector.java index 39c847ab22..08d7ce6b30 100644 --- a/services/java/com/android/server/NativeDaemonConnector.java +++ b/services/java/com/android/server/NativeDaemonConnector.java @@ -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; @@ -87,7 +89,7 @@ final class NativeDaemonConnector implements Runnable { } private void listenToSocket() throws IOException { - LocalSocket socket = null; + LocalSocket socket = null; try { socket = new LocalSocket(); @@ -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);