通过对内存流的Seek函数的使用来更改具体位置的内存块的值,但是值得注意的是并不更新以前的字符串的值 ,
通过使用AscII码也可以使用Unicode码来编码。
源代码如下:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace MemoryConsole
{
class Program
{
static void Main(string[] args)
{
string str = "This is a Memory Test./nThis is second line";
byte[] bytes = UnicodeEncoding.ASCII.GetBytes(str);
MemoryStream ms = new MemoryStream(bytes);
int nextByte=0;
AllString(ms);
nextByte = PositionChar(ms, nextByte);
PreviousString(str);
MemoryString(bytes,ms);
Console.ReadLine();
}
private static void MemoryString(byte[] bytes,MemoryStream ms)
{
Console.WriteLine("the string from the stream is:");
for (int i = 0; i < ms.Length; i++)
{
if (bytes[i] != 0)
{
Console.Write((char)bytes[i]);
}
}
}
private static void PreviousString(string str)
{
Console.WriteLine();
Console.WriteLine("the underline string is:");
Console.WriteLine(str);
}
private static int PositionChar(MemoryStream ms, int nextByte)
{
try
{
if (ms.CanSeek)
{
ms.Seek(3, SeekOrigin.Begin);
ms.WriteByte((byte)55);
ms.Seek(-1, SeekOrigin.Current);
nextByte = ms.ReadByte();
}
Console.WriteLine();
Console.WriteLine("the byte at position 3 is:");
Console.Write((char)nextByte);
}
catch (Exception err)
{
Console.WriteLine(err.Message);
}
return nextByte;
}
private static void AllString(MemoryStream ms)
{
Console.WriteLine("The sting is:");
int nextByte;
while ((nextByte = ms.ReadByte()) != -1)
{
if (nextByte != 0)
{
Console.Write((char)nextByte);
}
}
}
}
}