Does that code have a nasty edge case bug?
UTF8 is a variable-width encoding so if the buffer is >100kB and a valid multi-byte UTF8 encoded character happens to fall across the boundary of buffers in subsequent loop iterations you might get either an incorrect decoding or an exception thrown.


On 13/09/2013 14:46, [email protected] wrote:

If you are interested..memeory issue was resolved by doing the following...

Public Shared Function byteArrayToString(ByVal b() As Byte) As String

Dim ss As New System.Text.UTF8Encoding

Dim sString As String

Dim sb As New StringBuilder

Dim cursor As Integer

Dim sChunk As String

Try

' sString = System.Text.Encoding.UTF8.GetString(b)

While cursor < b.Length

Dim arr2() As Byte

If (cursor + 100000) > (b.Length) Then

arr2 = New Byte(b.Length - cursor - 1) {}

Array.Copy(b, cursor, arr2, 0, b.Length - cursor)

Else

arr2 = New Byte(100000 - 1) {}

Array.Copy(b, cursor, arr2, 0, 100000)

End If

sChunk = System.Text.Encoding.UTF8.GetString(arr2)

sb.Append(sChunk)

cursor += 100000

End While

' sString = ss.GetString(b)

Return sb.ToString

Catch ex As Exception

Throw ex

End Try

End Function

Anthony

Melbourne StuffUps...learn from others, share with others!

http://www.meetup.com/Melbourne-Ideas-Incubator-Stuffups-Failed-Startups/


----------------------------------------------------------------------------------
NOTICE : The information contained in this electronic mail message is privileged and confidential, and is intended only for use of the addressee. If you are not the intended recipient, you are hereby notified that any disclosure, reproduction, distribution or other use of this communication is strictly prohibited. If you have received this communication in error, please notify the sender by reply transmission and delete the message without copying or disclosing it. (*13POrtC*)
-----------------------------------------------------------------------------------

*From:*[email protected] [mailto:[email protected]] *On Behalf Of *David Kean
*Sent:* Wednesday, 11 September 2013 2:20 AM
*To:* ozDotNet
*Subject:* RE: out of memory..urgent

Memory isn't unlimited. Basically, when you convert from a byte array -> string, you have two copies of the same data (one for the byte array and one for the string) in memory.

What exactly are you doing? You are typically better off chunking and reading smaller amounts of data at a time. Use something like a StreamWriter over a stream to automatically handles the byte -> text conversion.

*From:*[email protected] [mailto:[email protected]] *On Behalf Of *[email protected]
*Sent:* Monday, September 9, 2013 8:05 PM
*To:* ozDotNet
*Subject:* out of memory..urgent

Getting out of memory exception when I try to

Dim s as string

Dim b() as Byte

s=System.Text.Encoding.GetEncoding("utf-8).GetString(b)

Definitely something about the length of b..works fine most of the time except if b length is very large

Anthony

Melbourne StuffUps...learn from others, share with others!

http://www.meetup.com/Melbourne-Ideas-Incubator-Stuffups-Failed-Startups/


----------------------------------------------------------------------------------
NOTICE : The information contained in this electronic mail message is privileged and confidential, and is intended only for use of the addressee. If you are not the intended recipient, you are hereby notified that any disclosure, reproduction, distribution or other use of this communication is strictly prohibited. If you have received this communication in error, please notify the sender by reply transmission and delete the message without copying or disclosing it. (*13POrtC*)
-----------------------------------------------------------------------------------


Reply via email to