blobinputstream.java

来自「PostgreSQL7.4.6 for Linux」· Java 代码 · 共 195 行

JAVA
195
字号
/*------------------------------------------------------------------------- * * BlobInputStream.java *     This is an implementation of an InputStream from a large object. * * Copyright (c) 2003, PostgreSQL Global Development Group * * IDENTIFICATION *	  $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/largeobject/Attic/BlobInputStream.java,v 1.5 2003/03/07 18:39:45 barry Exp $ * *------------------------------------------------------------------------- */package org.postgresql.largeobject;import java.io.InputStream;import java.io.IOException;import java.sql.SQLException;public class BlobInputStream extends InputStream{	/*	 * The parent LargeObject	 */	private LargeObject lo;	/*	 * Buffer used to improve performance	 */	private byte[] buffer;	/*	 * Position within buffer	 */	private int bpos;	/*	 * The buffer size	 */	private int bsize;	/*	 * The mark position	 */	private int mpos = 0;	/*	 * @param lo LargeObject to read from	 */	public BlobInputStream(LargeObject lo)	{		this(lo, 1024);	}	/*	 * @param lo LargeObject to read from	 * @param bsize buffer size	 */	public BlobInputStream(LargeObject lo, int bsize)	{		this.lo = lo;		buffer = null;		bpos = 0;		this.bsize = bsize;	}	/*	 * The minimum required to implement input stream	 */	public int read() throws java.io.IOException	{		try		{			if (buffer == null || bpos >= buffer.length)			{				buffer = lo.read(bsize);				bpos = 0;			}			// Handle EOF			if (bpos >= buffer.length)			{				return -1;			}			int ret = (buffer[bpos] & 0x7F);			if ((buffer[bpos] &0x80) == 0x80)			{				ret |= 0x80;			}			bpos++;			return ret;		}		catch (SQLException se)		{			throw new IOException(se.toString());		}	}	/*	 * Closes this input stream and releases any system resources associated	 * with the stream.	 *	 * <p> The <code>close</code> method of <code>InputStream</code> does	 * nothing.	 *	 * @exception  IOException	if an I/O error occurs.	 */	public void close() throws IOException	{		try		{			lo.close();			lo = null;		}		catch (SQLException se)		{			throw new IOException(se.toString());		}	}	/*	 * Marks the current position in this input stream. A subsequent call to	 * the <code>reset</code> method repositions this stream at the last marked	 * position so that subsequent reads re-read the same bytes.	 *	 * <p> The <code>readlimit</code> arguments tells this input stream to	 * allow that many bytes to be read before the mark position gets	 * invalidated.	 *	 * <p> The general contract of <code>mark</code> is that, if the method	 * <code>markSupported</code> returns <code>true</code>, the stream somehow	 * remembers all the bytes read after the call to <code>mark</code> and	 * stands ready to supply those same bytes again if and whenever the method	 * <code>reset</code> is called.  However, the stream is not required to	 * remember any data at all if more than <code>readlimit</code> bytes are	 * read from the stream before <code>reset</code> is called.	 *	 * <p> The <code>mark</code> method of <code>InputStream</code> does	 * nothing.	 *	 * @param	readlimit	the maximum limit of bytes that can be read before	 *						the mark position becomes invalid.	 * @see		java.io.InputStream#reset()	 */	public synchronized void mark(int readlimit)	{		try		{			mpos = lo.tell();		}		catch (SQLException se)		{			//throw new IOException(se.toString());		}	}	/*	 * Repositions this stream to the position at the time the	 * <code>mark</code> method was last called on this input stream.	 * NB: If mark is not called we move to the begining.	 * @see		java.io.InputStream#mark(int)	 * @see		java.io.IOException	 */	public synchronized void reset()	throws IOException	{		try		{			lo.seek(mpos);		}		catch (SQLException se)		{			throw new IOException(se.toString());		}	}	/*	 * Tests if this input stream supports the <code>mark</code> and	 * <code>reset</code> methods. The <code>markSupported</code> method of	 * <code>InputStream</code> returns <code>false</code>.	 *	 * @return	<code>true</code> if this true type supports the mark and reset	 *			method; <code>false</code> otherwise.	 * @see		java.io.InputStream#mark(int)	 * @see		java.io.InputStream#reset()	 */	public boolean markSupported()	{		return true;	}}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?