diff options
author | Sven Gothel <[email protected]> | 2008-08-30 07:48:36 +0000 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2008-08-30 07:48:36 +0000 |
commit | a2ad3cffb74ff1fc3b4f2aae109dff97b09e6a5a (patch) | |
tree | 953060167515b3ef4771d2a3921bfa8a878a28ef /src/classes/com/sun/opengl/util/io/StreamUtil.java | |
parent | 4667ad39359ac0f096ad8257bc3e29740493028a (diff) |
Refactoring common io code
git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/svn-server-sync/jogl/branches/JOGL_2_SANDBOX@1765 232f8b59-042b-4e1e-8c03-345bb8c30851
Diffstat (limited to 'src/classes/com/sun/opengl/util/io/StreamUtil.java')
-rwxr-xr-x | src/classes/com/sun/opengl/util/io/StreamUtil.java | 46 |
1 files changed, 36 insertions, 10 deletions
diff --git a/src/classes/com/sun/opengl/util/io/StreamUtil.java b/src/classes/com/sun/opengl/util/io/StreamUtil.java index 30cc0234a..70df3e075 100755 --- a/src/classes/com/sun/opengl/util/io/StreamUtil.java +++ b/src/classes/com/sun/opengl/util/io/StreamUtil.java @@ -39,16 +39,37 @@ package com.sun.opengl.util.io; +import javax.media.opengl.util.*; + import java.io.*; +import java.nio.*; /** Utilities for dealing with streams. */ public class StreamUtil { private StreamUtil() {} - public static byte[] readAll(InputStream in) throws IOException { - in = new BufferedInputStream(in); - int avail = in.available(); + public static byte[] readAll2Array(InputStream stream) throws IOException { + BytesRead bytesRead = readAll(stream); + byte[] data = bytesRead.data; + if (bytesRead.payloadLen != data.length) { + data = new byte[bytesRead.payloadLen]; + System.arraycopy(bytesRead.data, 0, data, 0, bytesRead.payloadLen); + } + return data; + } + + public static ByteBuffer readAll2Buffer(InputStream stream) throws IOException { + BytesRead bytesRead = readAll(stream); + return BufferUtil.newByteBuffer(bytesRead.data, 0, bytesRead.payloadLen); + } + + private static BytesRead readAll(InputStream stream) throws IOException { + // FIXME: Shall we do this here ? + if( !(stream instanceof BufferedInputStream) ) { + stream = new BufferedInputStream(stream); + } + int avail = stream.available(); byte[] data = new byte[avail]; int numRead = 0; int pos = 0; @@ -58,17 +79,22 @@ public class StreamUtil { System.arraycopy(data, 0, newData, 0, pos); data = newData; } - numRead = in.read(data, pos, avail); + numRead = stream.read(data, pos, avail); if (numRead >= 0) { pos += numRead; } - avail = in.available(); + avail = stream.available(); } while (avail > 0 && numRead >= 0); - if (pos != data.length) { - byte[] newData = new byte[pos]; - System.arraycopy(data, 0, newData, 0, pos); - data = newData; + + return new BytesRead(pos, data); + } + + private static class BytesRead { + BytesRead(int payloadLen, byte[] data) { + this.payloadLen=payloadLen; + this.data=data; } - return data; + int payloadLen; + byte[] data; } } |