You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2009/10/08 20:56:30 UTC
svn commit: r823274 -
/activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/Util/EndianBinaryReader.cs
Author: tabish
Date: Thu Oct 8 18:56:30 2009
New Revision: 823274
URL: http://svn.apache.org/viewvc?rev=823274&view=rev
Log:
Clean up the string reading code to remove a bunch of duplicate code: EndianBinaryReader.cs:
Modified:
activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/Util/EndianBinaryReader.cs
Modified: activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/Util/EndianBinaryReader.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/Util/EndianBinaryReader.cs?rev=823274&r1=823273&r2=823274&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/Util/EndianBinaryReader.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS/trunk/src/main/csharp/Util/EndianBinaryReader.cs Thu Oct 8 18:56:30 2009
@@ -144,90 +144,7 @@
/// <returns>A string</returns>
public override String ReadString()
{
- short utflen = ReadInt16();
- if(utflen > -1)
- {
- StringBuilder str = new StringBuilder(utflen);
-
- byte[] bytearr = new byte[utflen];
- int bytesRead = 0;
- while(bytesRead < utflen)
- {
- int rc = Read(bytearr, bytesRead, utflen - bytesRead);
- if(rc == 0)
- {
- throw new IOException("premature end of stream");
- }
-
- bytesRead += rc;
- }
-
- int c, char2, char3;
- int count = 0;
-
- while(count < utflen)
- {
- c = bytearr[count] & 0xff;
- switch(c >> 4)
- {
- case 0:
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
- /* 0xxxxxxx */
- count++;
- str.Append((char) c);
- break;
- case 12:
- case 13:
- /* 110x xxxx 10xx xxxx */
- count += 2;
- if(count > utflen)
- {
- throw CreateDataFormatException();
- }
-
- char2 = bytearr[count - 1];
- if((char2 & 0xC0) != 0x80)
- {
- throw CreateDataFormatException();
- }
-
- str.Append((char) (((c & 0x1F) << 6) | (char2 & 0x3F)));
- break;
- case 14:
- /* 1110 xxxx 10xx xxxx 10xx xxxx */
- count += 3;
- if(count > utflen)
- {
- throw CreateDataFormatException();
- }
-
- char2 = bytearr[count - 2];
- char3 = bytearr[count - 1];
- if(((char2 & 0xC0) != 0x80) || ((char3 & 0xC0) != 0x80))
- {
- throw CreateDataFormatException();
- }
-
- str.Append((char) (((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0)));
- break;
- default:
- /* 10xx xxxx, 1111 xxxx */
- throw CreateDataFormatException();
- }
- }
- // The number of chars produced may be less than utflen
- return str.ToString();
- }
- else
- {
- return null;
- }
+ return ReadString16();
}
/// <summary>
@@ -239,75 +156,16 @@
{
int utfLength = ReadUInt16();
- if(utfLength <= 0)
- {
- return "";
- }
-
- char[] result = new char[utfLength];
- byte[] buffer = new byte[utfLength];
-
- int bytesRead = 0;
- while(bytesRead < utfLength)
- {
- int rc = Read(buffer, bytesRead, utfLength - bytesRead);
- if(rc == 0)
- {
- throw new IOException("premature end of stream");
- }
-
- bytesRead += rc;
- }
-
- int count = 0;
- int index = 0;
- byte a = 0;
-
- while(count < utfLength)
+ if(utfLength < 0)
{
- if((result[index] = (char) buffer[count++]) < 0x80)
- {
- index++;
- }
- else if(((a = (byte) result[index]) & 0xE0) == 0xC0)
- {
- if(count >= utfLength)
- {
- throw new IOException("Invalid UTF-8 encoding found, start of two byte char found at end.");
- }
-
- byte b = buffer[count++];
- if((b & 0xC0) != 0x80)
- {
- throw new IOException("Invalid UTF-8 encoding found, byte two does not start with 0x80.");
- }
-
- result[index++] = (char) (((a & 0x1F) << 6) | (b & 0x3F));
- }
- else if((a & 0xF0) == 0xE0)
- {
- if(count + 1 >= utfLength)
- {
- throw new IOException("Invalid UTF-8 encoding found, start of three byte char found at end.");
- }
-
- byte b = buffer[count++];
- byte c = buffer[count++];
- if(((b & 0xC0) != 0x80) || ((c & 0xC0) != 0x80))
- {
- throw new IOException("Invalid UTF-8 encoding found, byte two does not start with 0x80.");
- }
-
- result[index++] = (char) (((a & 0x0F) << 12) |
- ((b & 0x3F) << 6) | (c & 0x3F));
- }
- else
- {
- throw new IOException("Invalid UTF-8 encoding found, aborting.");
- }
- }
+ return null;
+ }
+ else if(utfLength == 0)
+ {
+ return "";
+ }
- return new String(result, 0, index);
+ return doReadString(utfLength);
}
/// <summary>
@@ -319,77 +177,86 @@
{
int utfLength = ReadInt32();
- if(utfLength <= 0)
- {
- return "";
- }
-
- char[] result = new char[utfLength];
- byte[] buffer = new byte[utfLength];
-
- int bytesRead = 0;
- while(bytesRead < utfLength)
- {
- int rc = Read(buffer, bytesRead, utfLength - bytesRead);
- if(rc == 0)
- {
- throw new IOException("premature end of stream");
- }
-
- bytesRead += rc;
- }
-
- int count = 0;
- int index = 0;
- byte a = 0;
-
- while(count < utfLength)
- {
- if((result[index] = (char) buffer[count++]) < 0x80)
- {
- index++;
- }
- else if(((a = (byte) result[index]) & 0xE0) == 0xC0)
- {
- if(count >= utfLength)
- {
- throw new IOException("Invalid UTF-8 encoding found, start of two byte char found at end.");
- }
-
- byte b = buffer[count++];
- if((b & 0xC0) != 0x80)
- {
- throw new IOException("Invalid UTF-8 encoding found, byte two does not start with 0x80.");
- }
-
- result[index++] = (char) (((a & 0x1F) << 6) | (b & 0x3F));
- }
- else if((a & 0xF0) == 0xE0)
- {
-
- if(count + 1 >= utfLength)
- {
- throw new IOException("Invalid UTF-8 encoding found, start of three byte char found at end.");
- }
-
- byte b = buffer[count++];
- byte c = buffer[count++];
- if(((b & 0xC0) != 0x80) || ((c & 0xC0) != 0x80))
- {
- throw new IOException("Invalid UTF-8 encoding found, byte two does not start with 0x80.");
- }
-
- result[index++] = (char) (((a & 0x0F) << 12) |
- ((b & 0x3F) << 6) | (c & 0x3F));
- }
- else
- {
- throw new IOException("Invalid UTF-8 encoding found, aborting.");
- }
- }
+ if(utfLength < 0)
+ {
+ return null;
+ }
+ else if(utfLength == 0)
+ {
+ return "";
+ }
+
+ return doReadString(utfLength);
+ }
+
+ private string doReadString(int utfLength)
+ {
+ char[] result = new char[utfLength];
+ byte[] buffer = new byte[utfLength];
+
+ int bytesRead = 0;
+ while(bytesRead < utfLength)
+ {
+ int rc = Read(buffer, bytesRead, utfLength - bytesRead);
+ if(rc == 0)
+ {
+ throw new IOException("premature end of stream");
+ }
+
+ bytesRead += rc;
+ }
+
+ int count = 0;
+ int index = 0;
+ byte a = 0;
+
+ while(count < utfLength)
+ {
+ if((result[index] = (char) buffer[count++]) < 0x80)
+ {
+ index++;
+ }
+ else if(((a = (byte) result[index]) & 0xE0) == 0xC0)
+ {
+ if(count >= utfLength)
+ {
+ throw new IOException("Invalid UTF-8 encoding found, start of two byte char found at end.");
+ }
+
+ byte b = buffer[count++];
+ if((b & 0xC0) != 0x80)
+ {
+ throw new IOException("Invalid UTF-8 encoding found, byte two does not start with 0x80.");
+ }
+
+ result[index++] = (char) (((a & 0x1F) << 6) | (b & 0x3F));
+ }
+ else if((a & 0xF0) == 0xE0)
+ {
+
+ if(count + 1 >= utfLength)
+ {
+ throw new IOException("Invalid UTF-8 encoding found, start of three byte char found at end.");
+ }
+
+ byte b = buffer[count++];
+ byte c = buffer[count++];
+ if(((b & 0xC0) != 0x80) || ((c & 0xC0) != 0x80))
+ {
+ throw new IOException("Invalid UTF-8 encoding found, byte two does not start with 0x80.");
+ }
+
+ result[index++] = (char) (((a & 0x0F) << 12) |
+ ((b & 0x3F) << 6) | (c & 0x3F));
+ }
+ else
+ {
+ throw new IOException("Invalid UTF-8 encoding found, aborting.");
+ }
+ }
- return new String(result, 0, index);
- }
+ return new String(result, 0, index);
+ }
public override float ReadSingle()
{