On Dec 22, 2011, at 4:49 PM, John Croft wrote:
> I have the following code:
Runtime behavior will depend upon the contents of the QUICKEDIT_FILENAME file,
which you don't provide. That makes it rather hard to reproduce. :-)
So, my equivalent code works:
void TestStreamInvokers (TextView textview)
{
bool success = true;
var test_string = "hello";
Stream osa = OpenFileOutput ("test.txt",
FileCreationMode.Private);
var write_bytes = System.Text.Encoding.ASCII.GetBytes
(test_string);
osa.Write (write_bytes, 0, write_bytes.Length);
osa.Close ();
Stream isa = OpenFileInput ("test.txt");
var content = new byte[1024];
if (isa.Read(content,0,content.Length) > 0)
{
UTF8Encoding enc = new UTF8Encoding();
if (enc.GetChars(content).Length>0)
Console.WriteLine
(enc.GetChars(content),0,(enc.GetChars(content)).Length-1);
}
isa.Close ();
}
That said, I find your code to be rather...odd:
> void OpenFile()
> {
> byte[] content = new byte[1024];
> try
> {
> Stream fis = OpenFileInput(QUICKEDIT_FILENAME);
> if (fis.Read(content,0,content.Length) > 0)
Stream.Read() does not "null terminate" the buffer. You shouldn't discard the
return value, as that tells how many bytes were actually written into
`content`. If you reused the buffer (which you don't here, but if you did), you
may have "garbage data" left from a previous loop invocation that would then be
appended to your later strings.
> Any thoughts would be appreciated.
It's possible that QUICKEDIT_FILENAME contains data that UTF8Encoding doesn't
like, such as an invalid byte sequence or a byte sequence which is aborted
mid-sequence. Without knowing the contents, it's hard to say.
- Jon
_______________________________________________
Monodroid mailing list
[email protected]
UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid