javacommons/fileutils/javasrc/com/nokia/mj/impl/fileutils/FileOutputStream.java
branchRCL_3
changeset 19 04becd199f91
child 78 71ad690e91f5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/fileutils/javasrc/com/nokia/mj/impl/fileutils/FileOutputStream.java	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+package com.nokia.mj.impl.fileutils;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+class FileOutputStream extends OutputStream
+{
+    private FileStreamHandler iDataSink;
+    private final Object iCloseLock;
+    private boolean iIsClosed;
+    private byte[] iSingleByte;
+
+    private FileOutputStream()
+    {
+        iCloseLock = null;
+    }
+
+    public FileOutputStream(FileStreamHandler aDataSink)
+    {
+        iDataSink = aDataSink;
+        iCloseLock = new Object();
+        iIsClosed = false;
+        iSingleByte = new byte[1];
+    }
+
+    public void write(int aByte) throws IOException
+    {
+        iSingleByte[0] = (byte)(aByte & 0xFF);
+        write(iSingleByte, 0, 1);
+    }
+
+    public synchronized void write(byte[] aBytes, int aOffset, int aLength)
+    throws IOException
+    {
+        synchronized (iCloseLock)
+        {
+            if (iIsClosed)
+            {
+                throw new IOException("OutputStream closed");
+            }
+            FileStreamHandler.checkIOParams(aBytes, aOffset, aLength);
+
+            // Data given by user is immediately sent to be written.
+            iDataSink.writeBytes(aBytes, aOffset, aLength);
+        }
+    }
+
+    public synchronized void flush() throws IOException
+    {
+        // Data written to native side immediately. Nothing to flush.
+    }
+
+    public void close() throws IOException
+    {
+        // Closing OutputStream without flushing is against spec.
+        // See javadoc of DataOutputStream.
+        flush();
+        synchronized (iCloseLock)
+        {
+            if (!iIsClosed)
+            {
+                iIsClosed = true;
+                iDataSink.stopWrite();
+                iDataSink = null;
+            }
+        }
+    }
+
+    boolean isClosed()
+    {
+        synchronized (iCloseLock)
+        {
+            return iIsClosed;
+        }
+    }
+}
\ No newline at end of file