From bca4a24c38d3939bfa8e376d412650aae899c63b Mon Sep 17 00:00:00 2001 From: Hannes Janetzek <hannes.janetzek@gmail.com> Date: Fri, 11 Jan 2013 07:54:53 +0100 Subject: [PATCH] increase read-buffer if necessary --- .../oscim/database/oscimap/MapDatabase.java | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/org/oscim/database/oscimap/MapDatabase.java b/src/org/oscim/database/oscimap/MapDatabase.java index 74bc3dae..f96afe72 100644 --- a/src/org/oscim/database/oscimap/MapDatabase.java +++ b/src/org/oscim/database/oscimap/MapDatabase.java @@ -267,9 +267,9 @@ public class MapDatabase implements IMapDatabase { } // /////////////// hand sewed tile protocol buffers decoder /////////////// - private static final int BUFFER_SIZE = 65536; + private int BUFFER_SIZE = 65536; - private final byte[] mReadBuffer = new byte[BUFFER_SIZE]; + private byte[] mReadBuffer = new byte[BUFFER_SIZE]; // position in buffer private int mBufferPos; @@ -603,23 +603,31 @@ public class MapDatabase implements IMapDatabase { return cnt; } - private int readBuffer(int size) throws IOException { - int read = 0; + private void readBuffer(int size) throws IOException { + //int read = 0; // check if buffer already contains the request bytes if (mBufferPos + size < mBufferSize) - return mBufferSize - mBufferPos; + return;// mBufferSize - mBufferPos; // check if inputstream is read to the end if (mReadPos == mContentLenth) - return mBufferSize - mBufferPos; + return; // mBufferSize - mBufferPos; if (size > BUFFER_SIZE) { // FIXME throw exception for now, but frankly better // sanitize tile data on compilation. this should only // happen with strings or one ways coordinates are // larger than 64kb - throw new IOException("X requested size too large " + mTile); + //throw new IOException("X requested size too large " + mTile); + BUFFER_SIZE = size; + byte[] tmp = new byte[BUFFER_SIZE]; + + mBufferSize -= mBufferPos; + System.arraycopy(mReadBuffer, mBufferPos, tmp, 0, mBufferSize); + mBufferPos = 0; + mReadBuffer = tmp; + Log.d(TAG, mTile + "increase read buffer to " + size + " bytes"); } if (mBufferSize == mBufferPos) { @@ -653,7 +661,7 @@ public class MapDatabase implements IMapDatabase { break; } - read += len; + //read += len; mReadPos += len; if (mCacheFile != null) @@ -664,7 +672,7 @@ public class MapDatabase implements IMapDatabase { mBufferSize += len; } - return read; + return; // read; } private short[] decodeShortArray(int num, short[] array) throws IOException {