diff --git a/src/main/java/redis/clients/jedis/Connection.java b/src/main/java/redis/clients/jedis/Connection.java index c815f43..ec30e49 100644 --- a/src/main/java/redis/clients/jedis/Connection.java +++ b/src/main/java/redis/clients/jedis/Connection.java @@ -1,8 +1,9 @@ package redis.clients.jedis; +import java.io.BufferedInputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; import java.util.List; @@ -13,8 +14,8 @@ public class Connection { private Socket socket; private boolean connected = false; private Protocol protocol = new Protocol(); - private OutputStream outputStream; - private InputStream inputStream; + private DataOutputStream outputStream; + private DataInputStream inputStream; public Connection(String host) { super(); @@ -58,8 +59,9 @@ public class Connection { if (!connected) { socket = new Socket(host, port); connected = socket.isConnected(); - outputStream = socket.getOutputStream(); - inputStream = socket.getInputStream(); + outputStream = new DataOutputStream(socket.getOutputStream()); + inputStream = new DataInputStream(new BufferedInputStream(socket + .getInputStream())); } } diff --git a/src/main/java/redis/clients/jedis/Protocol.java b/src/main/java/redis/clients/jedis/Protocol.java index 22f07ee..4c2167b 100644 --- a/src/main/java/redis/clients/jedis/Protocol.java +++ b/src/main/java/redis/clients/jedis/Protocol.java @@ -1,8 +1,8 @@ package redis.clients.jedis; +import java.io.DataInputStream; +import java.io.DataOutputStream; import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; import java.util.ArrayList; import java.util.List; @@ -21,7 +21,7 @@ public class Protocol { public static final byte MINUS_BYTE = MINUS.getBytes()[0]; public static final byte COLON_BYTE = COLON.getBytes()[0]; - public void sendCommand(OutputStream os, String name, String... args) { + public void sendCommand(DataOutputStream os, String name, String... args) { StringBuilder builder = new StringBuilder(ASTERISK + (args.length + 1) + COMMAND_DELIMITER + DOLLAR + name.length() + COMMAND_DELIMITER + name + COMMAND_DELIMITER); @@ -36,20 +36,20 @@ public class Protocol { } } - public void processError(InputStream is) { + public void processError(DataInputStream is) { String message = readLine(is); throw new JedisException(message); } - private String readLine(InputStream is) { + private String readLine(DataInputStream is) { byte b; byte c; StringBuilder sb = new StringBuilder(); try { - while ((b = (byte) is.read()) != -1) { + while ((b = is.readByte()) != -1) { if (b == '\r') { - c = (byte) is.read(); + c = is.readByte(); if (c == '\n') { break; } @@ -65,24 +65,24 @@ public class Protocol { return sb.toString(); } - public String getBulkReply(InputStream is) { + public String getBulkReply(DataInputStream is) { Object reply = process(is); return (String) reply; } - public String getStatusCodeReply(InputStream is) { + public String getStatusCodeReply(DataInputStream is) { Object reply = process(is); return (String) reply; } - public int getIntegerReply(InputStream is) { + public int getIntegerReply(DataInputStream is) { Object reply = process(is); return (Integer) reply; } - private Object process(InputStream is) { + private Object process(DataInputStream is) { try { - byte b = (byte) is.read(); + byte b = is.readByte(); if (b == MINUS_BYTE) { processError(is); } else if (b == ASTERISK_BYTE) { @@ -102,13 +102,13 @@ public class Protocol { return null; } - private Object processStatusCodeReply(InputStream is) { + private Object processStatusCodeReply(DataInputStream is) { String ret = null; ret = readLine(is); return ret; } - private Object processBulkReply(InputStream is) { + private Object processBulkReply(DataInputStream is) { int len = Integer.parseInt(readLine(is)); if (len == -1) { return null; @@ -126,14 +126,14 @@ public class Protocol { return new String(read); } - private Object processInteger(InputStream is) { + private Object processInteger(DataInputStream is) { int ret = 0; String num = readLine(is); ret = Integer.parseInt(num); return ret; } - private Object processMultiBulkReply(InputStream is) { + private Object processMultiBulkReply(DataInputStream is) { int num = Integer.parseInt(readLine(is)); if (num == -1) { return null; @@ -146,7 +146,7 @@ public class Protocol { } @SuppressWarnings("unchecked") - public List getMultiBulkReply(InputStream is) { + public List getMultiBulkReply(DataInputStream is) { Object reply = process(is); List ret = (List) reply; return ret; diff --git a/src/test/java/redis/clients/jedis/tests/ProtocolTest.java b/src/test/java/redis/clients/jedis/tests/ProtocolTest.java index edbde2a..adf2a52 100644 --- a/src/test/java/redis/clients/jedis/tests/ProtocolTest.java +++ b/src/test/java/redis/clients/jedis/tests/ProtocolTest.java @@ -2,6 +2,8 @@ package redis.clients.jedis.tests; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PipedInputStream; @@ -23,7 +25,7 @@ public class ProtocolTest extends Assert { PipedOutputStream pos = new PipedOutputStream(pis); Protocol protocol = new Protocol(); - protocol.sendCommand(pos, "GET", "SOMEKEY"); + protocol.sendCommand(new DataOutputStream(pos), "GET", "SOMEKEY"); pos.close(); String expectedCommand = "*2\r\n$3\r\nGET\r\n$7\r\nSOMEKEY\r\n"; @@ -41,7 +43,7 @@ public class ProtocolTest extends Assert { public void bulkReply() { InputStream is = new ByteArrayInputStream("$6\r\nfoobar\r\n".getBytes()); Protocol protocol = new Protocol(); - String response = protocol.getBulkReply(is); + String response = protocol.getBulkReply(new DataInputStream(is)); assertEquals("foobar", response); } @@ -49,7 +51,7 @@ public class ProtocolTest extends Assert { public void nullBulkReply() { InputStream is = new ByteArrayInputStream("$-1\r\n".getBytes()); Protocol protocol = new Protocol(); - String response = protocol.getBulkReply(is); + String response = protocol.getBulkReply(new DataInputStream(is)); assertEquals(null, response); } @@ -57,7 +59,7 @@ public class ProtocolTest extends Assert { public void singleLineReply() { InputStream is = new ByteArrayInputStream("+OK\r\n".getBytes()); Protocol protocol = new Protocol(); - String response = protocol.getStatusCodeReply(is); + String response = protocol.getStatusCodeReply(new DataInputStream(is)); assertEquals("OK", response); } @@ -65,7 +67,7 @@ public class ProtocolTest extends Assert { public void integerReply() { InputStream is = new ByteArrayInputStream(":123\r\n".getBytes()); Protocol protocol = new Protocol(); - int response = protocol.getIntegerReply(is); + int response = protocol.getIntegerReply(new DataInputStream(is)); assertEquals(123, response); } @@ -77,7 +79,7 @@ public class ProtocolTest extends Assert { .getBytes()); Protocol protocol = new Protocol(); List response = (List) (List) protocol - .getMultiBulkReply(is); + .getMultiBulkReply(new DataInputStream(is)); List expected = new ArrayList(); expected.add("foo"); expected.add("bar"); @@ -90,7 +92,8 @@ public class ProtocolTest extends Assert { "*4\r\n$3\r\nfoo\r\n+OK\r\n:1000\r\n*2\r\n$3\r\nfoo\r\n$3\r\nbar" .getBytes()); protocol = new Protocol(); - List response2 = protocol.getMultiBulkReply(is); + List response2 = protocol + .getMultiBulkReply(new DataInputStream(is)); List expected2 = new ArrayList(); expected2.add("foo"); expected2.add("OK"); @@ -109,7 +112,7 @@ public class ProtocolTest extends Assert { InputStream is = new ByteArrayInputStream("*-1\r\n".getBytes()); Protocol protocol = new Protocol(); List response = (List) (List) protocol - .getMultiBulkReply(is); + .getMultiBulkReply(new DataInputStream(is)); assertNull(response); } } \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/benchmark/GetSetBenchmark.java b/src/test/java/redis/clients/jedis/tests/benchmark/GetSetBenchmark.java index 9c6a1a7..0bac8b7 100644 --- a/src/test/java/redis/clients/jedis/tests/benchmark/GetSetBenchmark.java +++ b/src/test/java/redis/clients/jedis/tests/benchmark/GetSetBenchmark.java @@ -29,4 +29,4 @@ public class GetSetBenchmark { System.out.println(((1000 * 2 * TOTAL_OPERATIONS) / elapsed) + " ops"); } -} +} \ No newline at end of file