Files
XplorePlane/XP.Hardware.RaySource.Comet.Host/Pipe/WriteOnlyPipeStream.cs
T

55 lines
1.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.IO;
namespace XP.Hardware.RaySource.Comet.Host.Pipe
{
/// <summary>
/// 管道写入流包装器
/// 重写 Flush() 为空操作,避免 StreamWriter.AutoFlush 触发
/// NamedPipe 的 FlushFileBuffers(该 API 会阻塞直到对端读取数据)
/// Write 操作直接写入底层管道的内核缓冲区,对端可立即读取
/// </summary>
internal class WriteOnlyPipeStream : Stream
{
private readonly Stream _inner;
public WriteOnlyPipeStream(Stream inner)
{
_inner = inner;
}
public override bool CanRead => false;
public override bool CanSeek => false;
public override bool CanWrite => _inner.CanWrite;
public override long Length => _inner.Length;
public override long Position
{
get => _inner.Position;
set => _inner.Position = value;
}
public override void Write(byte[] buffer, int offset, int count)
{
_inner.Write(buffer, offset, count);
}
/// <summary>
/// 空操作,不调用底层管道的 FlushFlushFileBuffers
/// </summary>
public override void Flush()
{
// 故意不调用 _inner.Flush()
}
public override int Read(byte[] buffer, int offset, int count) => throw new NotSupportedException();
public override long Seek(long offset, SeekOrigin origin) => throw new NotSupportedException();
public override void SetLength(long value) => throw new NotSupportedException();
protected override void Dispose(bool disposing)
{
// 不释放底层流,由调用方统一管理
base.Dispose(disposing);
}
}
}