Package org.jruby.util.io

Source Code of org.jruby.util.io.JRubyObjectInputStream$JRubyObjectInputStreamImpl

package org.jruby.util.io;

import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectStreamClass;
import java.io.IOException;
import org.jruby.Ruby;
import org.jruby.RubyObject;
import org.jruby.RubyClass;
import org.jruby.javasupport.JavaObject;
import org.jruby.runtime.builtin.IRubyObject;
import org.jruby.runtime.ObjectAllocator;
import org.jruby.anno.JRubyMethod;
import org.jruby.runtime.Block;
import org.jruby.runtime.Visibility;
import org.jruby.javasupport.JavaUtil;

public class JRubyObjectInputStream extends RubyObject {
    JRubyObjectInputStreamImpl impl;
    private static final ObjectAllocator JROIS_ALLOCATOR = new ObjectAllocator() {
      public IRubyObject allocate(Ruby runtime, RubyClass klass) {
    return new JRubyObjectInputStream(runtime, klass);
        }
    };
    public static RubyClass createJRubyObjectInputStream(Ruby runtime) {
  RubyClass result = runtime.defineClass("JRubyObjectInputStream",runtime.getObject(),JROIS_ALLOCATOR);
  result.defineAnnotatedMethods(JRubyObjectInputStream.class);
  return result;
    }

    @JRubyMethod(name = "new", rest = true, meta = true)
    public static IRubyObject newInstance(IRubyObject recv, IRubyObject[] args, Block block) {
        IRubyObject obj = ((RubyClass)recv).allocate();
        obj.callMethod(recv.getRuntime().getCurrentContext(), "initialize", args, block);
        return obj;
    }


    public JRubyObjectInputStream(Ruby runtime, RubyClass rubyClass) {
  super(runtime,rubyClass);
    }
   
    @JRubyMethod(name="initialize",required=1, visibility = Visibility.PRIVATE)
    public IRubyObject initialize(IRubyObject wrappedStream) throws IOException {
  InputStream stream = (InputStream)JavaUtil.convertRubyToJava(wrappedStream, InputStream.class);
  impl = new JRubyObjectInputStreamImpl(getRuntime(),stream);
  return this;
    }

    @JRubyMethod(name="read_object", alias="readObject")
  public IRubyObject readObject() throws IOException, ClassNotFoundException {
  return JavaObject.wrap(getRuntime(),impl.readObject());
    }


    @JRubyMethod(name="close")
    public IRubyObject close() throws IOException {
  impl.close();
  return this;
    }

    class JRubyObjectInputStreamImpl extends ObjectInputStream {
        protected Ruby runtime;

        public JRubyObjectInputStreamImpl(Ruby rt,InputStream in) throws IOException {
            super(in);
            runtime = rt;
        }
        protected Class resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
            return Class.forName(desc.getName(),true,runtime.getJRubyClassLoader());
        }
    }
}
TOP

Related Classes of org.jruby.util.io.JRubyObjectInputStream$JRubyObjectInputStreamImpl

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.