我一直指的是用java编写的开源HTTP代理项目,以便在C#中实现我自己的代理;但是有一些类在.Net中找不到它们的等价物,比如InputStream和OutputStream。我只是通过从Stream类派生来实现我自己的类,但我想知道这是否会使我的系统能够运行。以下是课程:
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对象的好方法,其中一个支持写入而另一个支持读取!
答案 0 :(得分:1)
不,您的代码无效。你没有对传递给你的构造函数的流做任何事情,你所有“支持”的成员只是递归地调用它们,导致StackOverflowException
。
您可以委托给您传递的NetworkStream
来电,但很难看到真正给您带来的好处。
只需对代理代码中的输入流和输出流使用相同的NetworkStream
- 您可能不需要编写自己的类派生自Stream
。
答案 1 :(得分:0)
调用任何当前方法将导致StackOverflowException(假设没有尾调用优化!)。
我假设您的代码应该委托给传递的NetworkStream对象上的等效方法,而不是自己调用。