mirror of
https://github.com/signalapp/Signal-Server
synced 2026-04-25 09:08:05 +01:00
65 lines
1.4 KiB
Java
65 lines
1.4 KiB
Java
package org.whispersystems.dispatch.io;
|
|
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
|
|
public class RedisInputStream {
|
|
|
|
private static final byte CR = 0x0D;
|
|
private static final byte LF = 0x0A;
|
|
|
|
private final InputStream inputStream;
|
|
|
|
public RedisInputStream(InputStream inputStream) {
|
|
this.inputStream = inputStream;
|
|
}
|
|
|
|
public String readLine() throws IOException {
|
|
ByteArrayOutputStream boas = new ByteArrayOutputStream();
|
|
|
|
boolean foundCr = false;
|
|
|
|
while (true) {
|
|
int character = inputStream.read();
|
|
|
|
if (character == -1) {
|
|
throw new IOException("Stream closed!");
|
|
}
|
|
|
|
boas.write(character);
|
|
|
|
if (foundCr && character == LF) break;
|
|
else if (character == CR) foundCr = true;
|
|
else if (foundCr) foundCr = false;
|
|
}
|
|
|
|
byte[] data = boas.toByteArray();
|
|
return new String(data, 0, data.length-2);
|
|
}
|
|
|
|
public byte[] readFully(int size) throws IOException {
|
|
byte[] result = new byte[size];
|
|
int offset = 0;
|
|
int remaining = result.length;
|
|
|
|
while (remaining > 0) {
|
|
int read = inputStream.read(result, offset, remaining);
|
|
|
|
if (read < 0) {
|
|
throw new IOException("Stream closed!");
|
|
}
|
|
|
|
offset += read;
|
|
remaining -= read;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
public void close() throws IOException {
|
|
inputStream.close();
|
|
}
|
|
|
|
}
|