【发布时间】:2011-12-22 17:28:40
【问题描述】:
这是包含 PushbackInputStream 类的原始 java 代码
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);
}
}
任何评论将不胜感激!
【问题讨论】:
-
抛弃 Java 的东西和它的老式换行检测。您需要的是 StreamReader 及其
ReadLine方法。 -
我无法理解你的意思,readline 方法将数据作为字符串返回,我想要一个字符!
标签: c# java inputstream