1 32 package com.imagero.uio.buffer; 33 34 import com.imagero.uio.io.IOutils; 35 36 import java.io.IOException; 37 import java.io.OutputStream; 38 import java.util.Enumeration; 39 40 43 public class OutputStreamBufferManager extends AbstractBufferManager implements MutableBufferManager { 44 45 OutputStream out; 46 47 48 public OutputStreamBufferManager(OutputStream out) { 49 this.out = out; 50 } 51 52 public byte[] getData(int i) throws IOException { 53 return new byte[0]; 54 } 55 56 public int getDataLength(int i) { 57 return bufferSize; 58 } 59 60 public int getIndex(long pos) { 61 return (int) (pos / bufferSize); 62 } 63 64 public long getLength() { 65 return 0; 66 } 67 68 public void close() { 69 try { 70 flush(); 71 } 72 catch (IOException ex) { 73 ex.printStackTrace(); 74 } 75 IOutils.closeStream(out); 76 } 77 78 public long getDataStart(int i) { 79 return bufferSize * i; 80 } 81 82 public void clear() { 83 try { 84 flush(); 85 } 86 catch (IOException ex) { 87 ex.printStackTrace(); 88 } 89 accessManager.clear(); 90 } 91 92 public void setMaxCache(int max) { 93 accessManager.setMaxBufferCount(max); 94 } 95 96 long lastClearPosition; 97 98 public void clear(long start, long end) throws IOException { 99 int bs = getStart(start); 100 int be = getEnd(end); 101 long s = getDataStart(bs); 102 long e = getDataStart(be) + getDataLength(be); 103 if (s > lastClearPosition) { 104 throw new IOException("Can't clear from " + s + " (possible start is: " + lastClearPosition + ")"); 105 } 106 clearImpl(bs, be); 107 lastClearPosition = e; 108 } 109 110 public void flush() throws IOException { 111 Enumeration enum = accessManager.keys(); 112 while (enum.hasMoreElements()) { 113 Buffer b = accessManager.get(enum.nextElement()); 114 MutableBuffer buffer = (MutableBuffer) b; 115 buffer.flush(); 116 } 117 } 118 } 119 | Popular Tags |