mirror of
https://github.com/UglyToad/PdfPig.git
synced 2026-03-10 00:23:29 +08:00
move code into correct directory structure
This commit is contained in:
83
src/UglyToad.Pdf/IO/RandomAccessInputStream.cs
Normal file
83
src/UglyToad.Pdf/IO/RandomAccessInputStream.cs
Normal file
@@ -0,0 +1,83 @@
|
||||
namespace UglyToad.Pdf.IO
|
||||
{
|
||||
public class RandomAccessInputStream : IInputStream
|
||||
{
|
||||
private readonly IRandomAccessRead input;
|
||||
private long position;
|
||||
|
||||
/**
|
||||
* Creates a new RandomAccessInputStream, with a position of zero. The InputStream will maintain
|
||||
* its own position independent of the RandomAccessRead.
|
||||
*
|
||||
* @param randomAccessRead The RandomAccessRead to read from.
|
||||
*/
|
||||
public RandomAccessInputStream(IRandomAccessRead randomAccessRead)
|
||||
{
|
||||
input = randomAccessRead;
|
||||
position = 0;
|
||||
}
|
||||
|
||||
void restorePosition()
|
||||
{
|
||||
input.Seek(position);
|
||||
}
|
||||
|
||||
public long available()
|
||||
{
|
||||
restorePosition();
|
||||
long available = input.Length() - input.GetPosition();
|
||||
if (available > int.MaxValue)
|
||||
{
|
||||
return int.MaxValue;
|
||||
}
|
||||
return available;
|
||||
}
|
||||
|
||||
public int read()
|
||||
{
|
||||
restorePosition();
|
||||
if (input.IsEof())
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
int b = input.Read();
|
||||
position += 1;
|
||||
return b;
|
||||
}
|
||||
|
||||
public int read(byte[] b)
|
||||
{
|
||||
return read(b, 0, b.Length);
|
||||
}
|
||||
|
||||
public int read(byte[] b, int off, int len)
|
||||
{
|
||||
restorePosition();
|
||||
if (input.IsEof())
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
int n = input.Read(b, off, len);
|
||||
position += n;
|
||||
return n;
|
||||
}
|
||||
|
||||
public long skip(long n)
|
||||
{
|
||||
restorePosition();
|
||||
input.Seek(position + n);
|
||||
position += n;
|
||||
return n;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
input.Dispose();
|
||||
}
|
||||
|
||||
long IInputStream.available()
|
||||
{
|
||||
throw new System.NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user