我的自定义InputStream和outputStream对象可以在c# HTTP程序中工作吗?

本文关键字:程序 HTTP 工作 InputStream 自定义 outputStream 对象 我的 | 更新日期: 2023-09-27 18:16:21

我一直在参考一个用java编写的开源HTTP代理项目,以便在c#中实现我自己的代理;然而,有一些类,我无法在。net中找到它们的等效,如InputStream和OutputStream。我只是通过从流类派生实现我自己的类,但我想知道这是否会使我的系统能够运行。下面是这些类:

     public class InputStream:Stream
     {
        public InputStream(NetworkStream networkStream)
        { }
        public InputStream(long Capacity)
        {
            this.SetLength(Capacity);
        }
        public override bool CanRead
        {
            get { return true; }
        }
       public override bool CanSeek
       {
          get { return true; }
       }
       public override bool CanWrite
       {
           get { return false; }
       }
      public override void Flush()
      {
          throw new NotSupportedException("The method or operation is not supported by   InputStream");
      }
      public override long Length
      {
           get { return this.Length; }
      }
      public override long Position
      {
          get
          {
            return this.Position;
           }
          set
          {
            this.Position = value;
          }
      }
      public override int Read(byte[] buffer, int offset, int count)
      {
          return this.Read(buffer, offset, count);
      }
      public override long Seek(long offset, SeekOrigin origin)
      {
          return this.Seek(offset, origin);
      }
      public override void SetLength(long value)
      {
           this.SetLength(value);
      }
      public override void Write(byte[] buffer, int offset, int count)
      {
        throw new NotSupportedException("The method or operation is not supported by InputStream");
      }
   }

InputStream和OutputStream对象应该作为networkStream对象,除了InputStream应该只支持读操作,而OuputStream应该只支持写操作!我想知道这是否是实现两个不同的networkStream对象的好方法,其中一个支持写入,另一个支持读取!

我的自定义InputStream和outputStream对象可以在c# HTTP程序中工作吗?

不行,你的代码不能工作。你没有对传递给构造函数的流做任何事情,所有"支持的"成员都只是递归地调用自己,导致StackOverflowException

您可以将调用委托给您传入的NetworkStream,但很难看出这将真正给您带来什么好处。

只需在代理代码中为输入流和输出流使用相同的NetworkStream -您可能不需要编写自己的类派生自Stream

调用任何当前方法都会导致StackOverflowException(假设没有尾部调用优化!)。

我认为你的代码应该委托给你传递的NetworkStream对象上的等效方法,而不是调用它们自己。