# Class FileByteStore

java.lang.Object
uk.ac.starlink.table.storage.FileByteStore

All Implemented Interfaces:
  `ByteStore`

public class FileByteStore extends Object implements ByteStore
ByteStore implementation which uses a temporary file.

Since:
  11 Jul 2008
Author:
  Mark Taylor

## Constructor Summary

Constructors
Constructor
Description
`FileByteStore()`
Constructs a new FileByteStore which uses a temporary file as backing store.
`FileByteStore(File file)`
Constructs a new FileByteStore which uses the given file as a backing store.

## Method Summary

Modifier and Type
Method
Description
`void`
`close()`
Tidies up.
`static void`
`copy(File file, OutputStream out)`
Utility method to copy the contents of a file to an output stream.
`void`
`copy(OutputStream out)`
Takes all the data written so far into this store's sink stream and copies it to a destination stream.
`File`
`getFile()`
Returns the file used by this store.
`long`
`getLength()`
Returns the number of bytes currently stored in this object.
`OutputStream`
`getOutputStream()`
Returns an output stream which can be used to write to the store.
`ByteBuffer[]`
`toByteBuffers()`
Returns an array of byte buffers containing the bytes written to this store.
`static ByteBuffer[]`
`toByteBuffers(File file)`
Returns a read-only ByteBuffer array representing the contents of a file, with default maximum buffer length.

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### FileByteStore

public FileByteStore(File file) throws IOException
Constructs a new FileByteStore which uses the given file as a backing store. Nothing is done to mark this file as temporary.

Parameters:
  `file` - location of the backing file which will be used
Throws:
  `IOException` - if there is some I/O-related problem with opening the file
  `SecurityException` - if the current security context does not allow writing to a temporary file

### FileByteStore

public FileByteStore() throws IOException
Constructs a new FileByteStore which uses a temporary file as backing store. The temporary file will be written to the default temporary directory, given by the value of the `java.io.tmpdir` system property.

Throws:
  `IOException` - if there is some I/O-related problem with opening the file
  `SecurityException` - if the current security context does not allow writing to a temporary file

## Method Details

### getFile

public File getFile()
Returns the file used by this store.

Returns:
  file

### getOutputStream

public OutputStream getOutputStream()
Description copied from interface: `ByteStore`
Returns an output stream which can be used to write to the store. May be called multiple times; always returns the same object. Note that this is not in general buffered - it is the responsibility of the user to take steps like wrapping it in a `BufferedOutputStream` for efficiency if required.

Specified by:
  `getOutputStream` in interface `ByteStore`
Returns:
  data sink stream

### getLength

public long getLength()
Description copied from interface: `ByteStore`
Returns the number of bytes currently stored in this object.

Specified by:
  `getLength` in interface `ByteStore`
Returns:
  byte count

### copy

public void copy(OutputStream out) throws IOException
Description copied from interface: `ByteStore`
Takes all the data written so far into this store's sink stream and copies it to a destination stream. The output stream is not closed.

Specified by:
  `copy` in interface `ByteStore`
Parameters:
  `out` - data destination stream
Throws:
  `IOException`

### toByteBuffers

public ByteBuffer[] toByteBuffers() throws IOException
Description copied from interface: `ByteStore`
Returns an array of byte buffers containing the bytes written to this store. The stored bytes are all of the bytes from the first buffer in the returned array, followed by all in the second, etc. In many cases the returned array will, and probably should, contain a single buffer, but if the written byte count exceeds `Integer.MAX_VALUE`, more than one will be required. The limit of each buffer indicates the number of bytes it contains.

Usual usage will be to write all data, then call this method once; this model may affect implementation decisions about efficiency.

Specified by:
  `toByteBuffers` in interface `ByteStore`
Returns:
  byte buffer containing bytes written
Throws:
  `IOException` - if there is an I/O error

### copy

public static void copy(File file, OutputStream out) throws IOException
Utility method to copy the contents of a file to an output stream. The stream is not closed.

Parameters:
  `file` - file
  `out` - destination stream
Throws:
  `IOException`

### toByteBuffers

public static ByteBuffer[] toByteBuffers(File file) throws IOException
Returns a read-only ByteBuffer array representing the contents of a file, with default maximum buffer length. If the file can be represented in a single ByteBuffer the result will be a single-element array; otherwise the concatenation of the buffers in the result gives the file content.

Parameters:
  `file` - file
Returns:
  mapped byte buffers
Throws:
  `IOException`

### close

public void close()
Description copied from interface: `ByteStore`
Tidies up. Should be called when the data in this object is no longer required. This object may no longer be usable following a call to this method.

Specified by:
  `close` in interface `ByteStore`