You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by cu...@apache.org on 2012/05/17 22:16:07 UTC

svn commit: r1339841 - in /avro/trunk: CHANGES.txt lang/java/avro/src/main/java/org/apache/avro/file/DataFileWriter.java

Author: cutting
Date: Thu May 17 20:16:07 2012
New Revision: 1339841

URL: http://svn.apache.org/viewvc?rev=1339841&view=rev
Log:
AVRO-1090. Java: Permit appending to files besides java.io.File, e.g., files in HDFS.

Modified:
    avro/trunk/CHANGES.txt
    avro/trunk/lang/java/avro/src/main/java/org/apache/avro/file/DataFileWriter.java

Modified: avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1339841&r1=1339840&r2=1339841&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Thu May 17 20:16:07 2012
@@ -35,6 +35,9 @@ Avro 1.7.0 (unreleased)
     AVRO-1062. Java: Remove use of java.rmi.server.UID so things work
     on Android.  (Kevin Zhao via cutting)
 
+    AVRO-1090. Java: Permit appending to files besides java.io.File,
+    e.g., files in HDFS. (cutting)
+
   BUG FIXES
 
     AVRO-1045. Java: Fix a bug in GenericData#deepCopy() of ByteBuffer values.

Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/file/DataFileWriter.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/file/DataFileWriter.java?rev=1339841&r1=1339840&r2=1339841&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/file/DataFileWriter.java (original)
+++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/file/DataFileWriter.java Thu May 17 20:16:07 2012
@@ -21,14 +21,11 @@ import java.io.BufferedOutputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.Closeable;
 import java.io.File;
-import java.io.FileDescriptor;
-import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.FilterOutputStream;
 import java.io.Flushable;
 import java.io.IOException;
 import java.io.OutputStream;
-import java.io.RandomAccessFile;
 import java.io.UnsupportedEncodingException;
 import java.nio.ByteBuffer;
 import java.security.MessageDigest;
@@ -149,14 +146,19 @@ public class DataFileWriter<D> implement
 
   /** Open a writer appending to an existing file. */
   public DataFileWriter<D> appendTo(File file) throws IOException {
+    return appendTo(new SeekableFileInput(file),
+                    new FileOutputStream(file, true));
+  }
+
+  /** Open a writer appending to an existing file.
+   * @param in reading the existing file.
+   * @param out positioned at the end of the existing file.
+   */
+  public DataFileWriter<D> appendTo(SeekableInput in, OutputStream out)
+    throws IOException {
     assertNotOpen();
-    if (!file.exists())
-      throw new FileNotFoundException("Not found: "+file);
-    RandomAccessFile raf = new RandomAccessFile(file, "r");
-    FileDescriptor fd = raf.getFD();
     DataFileReader<D> reader =
-      new DataFileReader<D>(new SeekableFileInput(fd),
-                            new GenericDatumReader<D>());
+      new DataFileReader<D>(in, new GenericDatumReader<D>());
     this.schema = reader.getSchema();
     this.sync = reader.getHeader().sync;
     this.meta.putAll(reader.getHeader().meta);
@@ -167,9 +169,9 @@ public class DataFileWriter<D> implement
     } else {
       this.codec = CodecFactory.nullCodec().createInstance();
     }
-    raf.close();
+    reader.close();
 
-    init(new FileOutputStream(file, true));
+    init(out);
 
     return this;
   }