这是原始的java代码,它包含PushbackInputStream类
public String readLine(InputStream in) throws IOException
{
char buf[] = new char[128];
int offset = 0;
int ch;
for (;;)
{
ch = in.read();
if (ch == -1 || ch == 'n')
{
break;
}
else if (ch == 'r')
{
int tmpch = in.read();
if (tmpch != 'n')
{
if (! (in instanceof PushbackInputStream))PushbackInputStream))
{
in = new PushbackInputStream(in);
}
((PushbackInputStream) in).unread(tmpch);
}
break;
}
else
{
if (offset == buf.length)
{
char tmpbuf[] = buf;
buf = new char[tmpbuf.length * 2];
System.arraycopy(tmpbuf, 0, buf, 0, offset);
}
buf[offset++] = (char) ch;
}
}
return String.copyValueOf(buf, 0, offset);
}
这是我转换为c#的内容,我使用StreamReader类的peek方法实现了PushbackInputstream,但是有一个关键字我无法像instanceof那样破译。关键字"instanceof"在这种情况下重要吗?
public String readLine(NetworkStream nsStream)
{
using (StreamReader reader = new StreamReader(nsStream))
{
char[] buffer = new char[128];
int offset = 0;
int ch;
for (; ; )
{
ch = reader.Read();
if (ch == -1 || ch == 'n')
{
break;
}
else if (ch == 'r')
{
if ((reader.Peek()) == 'n')
{
break;
}
else
{
reader.Read();
}
}
else
{
if (offset == buffer.Length)
{
char[] tempBuffer = buffer;
buffer = new char[tempBuffer.Length * 2];
Array.Copy(tempBuffer, 0, buffer, 0, offset);
}
buffer[offset++] = (char)ch;
}
}
return new string(buffer);
}
}
任何评论都将是感激的!
您可以将网络流封装在StreamReader
中并使用其Peek()
方法:
using(StreamReader streamReader = new StreamReader(someNetworkStream))
{
int nextChar = streamReader.Peek();
}