需要关于java pushbackInpuStream代码翻译成c#的注释



这是原始的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();
}

最新更新