【问题标题】:Need comment about java pushbackInpuStream code translated to C#需要关于 java pushbackInpuStream 代码翻译成 C# 的评论
【发布时间】: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


【解决方案1】:

您可以将网络流包装在 StreamReader 中并使用其 Peek() 方法:

using(StreamReader streamReader = new StreamReader(someNetworkStream))
{
     int nextChar = streamReader.Peek();
}

【讨论】:

  • 你能举个例子吗?你是什​​么意思在streamReader中包装网络流?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 2014-01-06
  • 2019-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多