bloboutputstream.java

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

JAVA
149
字号
/*------------------------------------------------------------------------- * * BlobOutputStream.java *     This implements a basic output stream that writes to a LargeObject * * Copyright (c) 2003, PostgreSQL Global Development Group * * IDENTIFICATION *	  $Header: /cvsroot/pgsql/src/interfaces/jdbc/org/postgresql/largeobject/Attic/BlobOutputStream.java,v 1.6 2003/03/07 18:39:45 barry Exp $ * *------------------------------------------------------------------------- */package org.postgresql.largeobject;import java.io.IOException;import java.io.OutputStream;import java.sql.SQLException;public class BlobOutputStream extends OutputStream{	/*	 * The parent LargeObject	 */	private LargeObject lo;	/*	 * Buffer	 */	private byte buf[];	/*	 * Size of the buffer (default 1K)	 */	private int bsize;	/*	 * Position within the buffer	 */	private int bpos;	/*	 * Create an OutputStream to a large object	 * @param lo LargeObject	 */	public BlobOutputStream(LargeObject lo)	{		this(lo, 1024);	}	/*	 * Create an OutputStream to a large object	 * @param lo LargeObject	 * @param bsize The size of the buffer used to improve performance	 */	public BlobOutputStream(LargeObject lo, int bsize)	{		this.lo = lo;		this.bsize = bsize;		buf = new byte[bsize];		bpos = 0;	}	public void write(int b) throws java.io.IOException	{		try		{			if (bpos >= bsize)			{				lo.write(buf);				bpos = 0;			}			buf[bpos++] = (byte)b;		}		catch (SQLException se)		{			throw new IOException(se.toString());		}	}	public void write(byte[] buf, int off, int len) throws java.io.IOException	{		try			{				// If we have any internally buffered data, send it first				if ( bpos > 0 )					flush();				if ( off == 0 && len == buf.length )					lo.write(buf); // save a buffer creation and copy since full buffer written				else					lo.write(buf,off,len);			}		catch (SQLException se)			{				throw new IOException(se.toString());			}	}	/*	 * Flushes this output stream and forces any buffered output bytes	 * to be written out. The general contract of <code>flush</code> is	 * that calling it is an indication that, if any bytes previously	 * written have been buffered by the implementation of the output	 * stream, such bytes should immediately be written to their	 * intended destination.	 *	 * @exception  IOException	if an I/O error occurs.	 */	public void flush() throws IOException	{		try		{			if (bpos > 0)				lo.write(buf, 0, bpos);			bpos = 0;		}		catch (SQLException se)		{			throw new IOException(se.toString());		}	}	/*	 * Closes this output stream and releases any system resources	 * associated with this stream. The general contract of <code>close</code>	 * is that it closes the output stream. A closed stream cannot perform	 * output operations and cannot be reopened.	 * <p>	 * The <code>close</code> method of <code>OutputStream</code> does nothing.	 *	 * @exception  IOException	if an I/O error occurs.	 */	public void close() throws IOException	{		try		{			flush();			lo.close();			lo = null;		}		catch (SQLException se)		{			throw new IOException(se.toString());		}	}}

⌨️ 快捷键说明

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