92 lines
2.2 KiB
C#
92 lines
2.2 KiB
C#
using java.io;
|
|
using JavaIOException = java.io.IOException;
|
|
using SystemIOException = System.IO.IOException;
|
|
|
|
namespace LuckPerms.Torch.Utils.Extensions;
|
|
|
|
public static class StreamExtensions
|
|
{
|
|
public static InputStream GetInputStream(this Stream stream)
|
|
{
|
|
if (!stream.CanRead)
|
|
throw new ArgumentException("Stream should be readable", nameof(stream));
|
|
|
|
return new WrapperInputStream(stream);
|
|
}
|
|
|
|
private sealed class WrapperInputStream(Stream stream) : InputStream
|
|
{
|
|
public override int read()
|
|
{
|
|
try
|
|
{
|
|
return stream.ReadByte();
|
|
}
|
|
catch (SystemIOException e)
|
|
{
|
|
throw new JavaIOException(e.Message, e);
|
|
}
|
|
}
|
|
|
|
public override int read(byte[] b, int off, int len)
|
|
{
|
|
try
|
|
{
|
|
return stream.Read(b, off, len);
|
|
}
|
|
catch (SystemIOException e)
|
|
{
|
|
throw new JavaIOException(e.Message, e);
|
|
}
|
|
}
|
|
|
|
public override long skip(long n)
|
|
{
|
|
if (!stream.CanSeek) return base.skip(n);
|
|
|
|
try
|
|
{
|
|
return stream.Seek(n, SeekOrigin.Current);
|
|
}
|
|
catch (SystemIOException e)
|
|
{
|
|
throw new JavaIOException(e.Message, e);
|
|
}
|
|
}
|
|
|
|
public override int available()
|
|
{
|
|
try
|
|
{
|
|
return (int)(stream.Length - stream.Position);
|
|
}
|
|
catch (SystemIOException e)
|
|
{
|
|
throw new JavaIOException(e.Message, e);
|
|
}
|
|
}
|
|
|
|
public override void reset()
|
|
{
|
|
if (!stream.CanSeek)
|
|
{
|
|
base.reset();
|
|
return;
|
|
}
|
|
|
|
try
|
|
{
|
|
stream.Seek(0, SeekOrigin.Begin);
|
|
}
|
|
catch (SystemIOException e)
|
|
{
|
|
throw new JavaIOException(e.Message, e);
|
|
}
|
|
}
|
|
|
|
public override void close()
|
|
{
|
|
stream.Dispose();
|
|
}
|
|
}
|
|
} |