diff src/org/tmatesoft/hg/internal/DataAccess.java @ 681:4f93bbc73b64

Do not instantiate thousands of small arrays(numerous readInt/readLong calls)
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Sun, 21 Jul 2013 17:48:05 +0200
parents e1b29756f901
children
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/internal/DataAccess.java	Sun Jul 21 17:15:34 2013 +0200
+++ b/src/org/tmatesoft/hg/internal/DataAccess.java	Sun Jul 21 17:48:05 2013 +0200
@@ -29,6 +29,8 @@
  * @author TMate Software Ltd.
  */
 public class DataAccess {
+	private byte[] longBuffer;
+
 	public boolean isEmpty() throws IOException {
 		return true;
 	}
@@ -78,7 +80,10 @@
 		// no-op in this empty implementation
 	}
 	public int readInt() throws IOException {
-		byte[] b = new byte[4];
+		if (longBuffer == null) {
+			longBuffer = new byte[8];
+		}
+		byte[] b = longBuffer;
 		readBytes(b, 0, 4);
 		return b[0] << 24 | (b[1] & 0xFF) << 16 | (b[2] & 0xFF) << 8 | (b[3] & 0xFF);
 	}
@@ -87,7 +92,10 @@
 	 * Read 8 bytes as long value, big-endian.
 	 */
 	public long readLong() throws IOException {
-		byte[] b = new byte[8];
+		if (longBuffer == null) {
+			longBuffer = new byte[8];
+		}
+		byte[] b = longBuffer;
 		readBytes(b, 0, 8);
 		int i1 = b[0] << 24 | (b[1] & 0xFF) << 16 | (b[2] & 0xFF) << 8 | (b[3] & 0xFF);
 		int i2 = b[4] << 24 | (b[5] & 0xFF) << 16 | (b[6] & 0xFF) << 8 | (b[7] & 0xFF);