Beispiel #1
1
 /**
  * Populate this instance with what we find on the passed in <code>in</code> stream. Can
  * deserialize protobuf of old Writables format.
  *
  * @param in
  * @throws IOException
  * @see #write(DataOutputStream)
  */
 void read(final DataInputStream in) throws IOException {
   // This code is tested over in TestHFileReaderV1 where we read an old hfile w/ this new code.
   int pblen = ProtobufUtil.lengthOfPBMagic();
   byte[] pbuf = new byte[pblen];
   if (in.markSupported()) in.mark(pblen);
   int read = in.read(pbuf);
   if (read != pblen) throw new IOException("read=" + read + ", wanted=" + pblen);
   if (ProtobufUtil.isPBMagicPrefix(pbuf)) {
     parsePB(HFileProtos.FileInfoProto.parseDelimitedFrom(in));
   } else {
     if (in.markSupported()) {
       in.reset();
       parseWritable(in);
     } else {
       // We cannot use BufferedInputStream, it consumes more than we read from the underlying IS
       ByteArrayInputStream bais = new ByteArrayInputStream(pbuf);
       SequenceInputStream sis = new SequenceInputStream(bais, in); // Concatenate input streams
       // TODO: Am I leaking anything here wrapping the passed in stream?  We are not calling
       // close on the wrapped
       // streams but they should be let go after we leave this context?  I see that we keep a
       // reference to the
       // passed in inputstream but since we no longer have a reference to this after we leave,
       // we should be ok.
       parseWritable(new DataInputStream(sis));
     }
   }
 }
Beispiel #2
1
 /**
  * Parses an HRegionInfo instance from the passed in stream. Presumes the HRegionInfo was
  * serialized to the stream with {@link #toDelimitedByteArray()}
  *
  * @param in
  * @return An instance of HRegionInfo.
  * @throws IOException
  */
 public static HRegionInfo parseFrom(final DataInputStream in) throws IOException {
   // I need to be able to move back in the stream if this is not a pb serialization so I can
   // do the Writable decoding instead.
   int pblen = ProtobufUtil.lengthOfPBMagic();
   byte[] pbuf = new byte[pblen];
   if (in.markSupported()) { // read it with mark()
     in.mark(pblen);
   }
   int read =
       in.read(pbuf); // assumption: if Writable serialization, it should be longer than pblen.
   if (read != pblen) throw new IOException("read=" + read + ", wanted=" + pblen);
   if (ProtobufUtil.isPBMagicPrefix(pbuf)) {
     return convert(HBaseProtos.RegionInfo.parseDelimitedFrom(in));
   } else {
     // Presume Writables.  Need to reset the stream since it didn't start w/ pb.
     if (in.markSupported()) {
       in.reset();
       HRegionInfo hri = new HRegionInfo();
       hri.readFields(in);
       return hri;
     } else {
       // we cannot use BufferedInputStream, it consumes more than we read from the underlying IS
       ByteArrayInputStream bais = new ByteArrayInputStream(pbuf);
       SequenceInputStream sis = new SequenceInputStream(bais, in); // concatenate input streams
       HRegionInfo hri = new HRegionInfo();
       hri.readFields(new DataInputStream(sis));
       return hri;
     }
   }
 }
 @Override
 public boolean markSupported() {
   return dataInput.markSupported();
 }
 @Override
 public boolean markSupported() {
   return in.markSupported();
 }