Package _io

Source Code of _io.BurstBufferedWriter

/*
* Created on Jun 1, 2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package _io;

import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.BufferOverflowException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
* @author Adam
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class BurstBufferedWriter {

  String fileName;
  ByteBuffer buf;
 
  int bufferSize;
 
  public BurstBufferedWriter(String fileName, int bufferSize) throws IOException {
    this.fileName = fileName;
    this.bufferSize = bufferSize;
   
    int initSize = (int) Math.floor(Math.random() * bufferSize);
   
    buf = ByteBuffer.allocate(initSize);
  }
 
  public void writeShort(short x) throws IOException  {
    try {
      buf.putShort(x);
    } catch (BufferOverflowException boe) {
      recycleBuffer();
      buf.putShort(x);
    }
  }
 
  public void writeByte(byte x) throws IOException  {
    try {
      buf.put(x);
    } catch (BufferOverflowException boe) {
      recycleBuffer();
      buf.put(x);
    }
  }
 
  public void writeInt(int x) throws IOException  {
    try {
      buf.putInt(x);
    } catch (BufferOverflowException boe) {
      recycleBuffer();
      buf.putInt(x);
    }
  }
 
  public void writeLong(long x) throws IOException  {
    try {
      buf.putLong(x);
    } catch (BufferOverflowException boe) {
      recycleBuffer();
      buf.putLong(x);
    }
  }
 
  public void writeDouble(double x) throws IOException  {
    try {
      buf.putDouble(x);
    } catch (BufferOverflowException boe) {
      recycleBuffer();
      buf.putDouble(x);
    }
  }
 
  public void writeFloat(float x) throws IOException  {
    try {
      buf.putFloat(x);
    } catch (BufferOverflowException boe) {
      recycleBuffer();
      buf.putFloat(x);
    }
  }
 
  private void recycleBuffer() throws IOException {
    FileOutputStream foe = new FileOutputStream(fileName, true); // append mode!
    FileChannel fc = foe.getChannel();
   
    buf.flip();
    fc.write(buf);
   
    if(buf.hasRemaining()) {
      throw new RuntimeException();
    }
   
    fc.force(true);
   
    fc.close();
    foe.close();
   
    buf = ByteBuffer.allocate(bufferSize);
  }
 
  public void close() throws IOException {
    recycleBuffer();
    buf = null;
  }
 
  protected void finalize() throws Throwable {
    close();
    super.finalize();
  }
 
 
}
TOP

Related Classes of _io.BurstBufferedWriter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.