cdroutputstream.java

来自「java jdk 1.4的源码」· Java 代码 · 共 418 行

JAVA
418
字号
/* * @(#)CDROutputStream.java	1.24 03/01/23 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package com.sun.corba.se.internal.iiop;import java.io.IOException;import java.io.Serializable;import java.math.BigDecimal;import org.omg.CORBA.TypeCode;import org.omg.CORBA.Principal;import org.omg.CORBA.Any;import org.omg.CORBA.INTERNAL;import org.omg.CORBA.BAD_PARAM;import org.omg.CORBA.CompletionStatus;import com.sun.corba.se.internal.core.GIOPVersion;import com.sun.corba.se.internal.core.CodeSetConversion;import com.sun.corba.se.internal.core.OSFCodeSetRegistry;import com.sun.corba.se.internal.orbutil.ORBConstants;import com.sun.corba.se.internal.orbutil.MinorCodes;/** * This is delegates to the real implementation. */public abstract class CDROutputStream    extends org.omg.CORBA_2_3.portable.OutputStream    implements com.sun.corba.se.internal.core.MarshalOutputStream,               org.omg.CORBA.DataOutputStream{    private CDROutputStreamBase impl;    // We can move this out somewhere later.  For now, it serves its purpose    // to create a concrete CDR delegate based on the GIOP version.    private static class OutputStreamFactory {                public static CDROutputStreamBase newOutputStream(GIOPVersion version)        {            switch(version.intValue())            {                case GIOPVersion.VERSION_1_0:                    return new CDROutputStream_1_0();                case GIOPVersion.VERSION_1_1:                    return new CDROutputStream_1_1();                case GIOPVersion.VERSION_1_2:                    return new CDROutputStream_1_2();                default:                    // REVISIT - what is appropriate?  INTERNAL exceptions                    // are really hard to track later.                    throw new org.omg.CORBA.INTERNAL();            }        }    }    // Called by IIOPOutputStream    public CDROutputStream(org.omg.CORBA.ORB orb,                           GIOPVersion version)     {        impl = OutputStreamFactory.newOutputStream(version);        BufferManagerWrite bufMgr            = BufferManagerFactory.newBufferManagerWrite(version, orb);        impl.init(orb, bufMgr);        impl.setParent(this);    }    // Required by EncapsOutputStream    public CDROutputStream(org.omg.CORBA.ORB orb,                           GIOPVersion version,                           boolean allowFragmentation,                           boolean littleEndian) {                int size;        if (orb != null)            size = ((com.sun.corba.se.internal.corba.ORB)orb).getGIOPBufferSize();        else            size = ORBConstants.GIOP_DEFAULT_BUFFER_SIZE;        BufferManagerWrite bufMgr;        if (!allowFragmentation)            bufMgr = new BufferManagerWriteGrow(size);        else            bufMgr = BufferManagerFactory.newBufferManagerWrite(version, orb, size);        impl = OutputStreamFactory.newOutputStream(version);                impl.init(orb, littleEndian, bufMgr.getInitialBufferSize(), bufMgr);        impl.setParent(this);    }    public CDROutputStream(org.omg.CORBA.ORB orb,                           GIOPVersion version,                           int size,                           boolean allowFragmentation) {        BufferManagerWrite bufMgr;        if (!allowFragmentation)            bufMgr = new BufferManagerWriteGrow(size);        else            bufMgr = BufferManagerFactory.newBufferManagerWrite(version, orb, size);        impl = OutputStreamFactory.newOutputStream(version);                impl.init(orb, bufMgr);        impl.setParent(this);    }            // This is used by     // ServiceContext for creating encapsulations of correct version encoding.    // ADDED (Ram J) (05/20/2000)    public CDROutputStream(org.omg.CORBA.ORB orb, GIOPVersion version,            boolean allowFragmentation) {        if (allowFragmentation == false) {            impl = OutputStreamFactory.newOutputStream(version);            // A grow strategy is used for encoding encapsulations.            // streaming behaviour is incorrect.            BufferManagerWrite bufMgr = null;            if (orb == null || !(orb instanceof com.sun.corba.se.internal.corba.ORB)) {                bufMgr = new BufferManagerWriteGrow(ORBConstants.GIOP_DEFAULT_BUFFER_SIZE);            } else {                int defaultBufSize = ((com.sun.corba.se.internal.corba.ORB) orb).getGIOPBufferSize();                bufMgr = new BufferManagerWriteGrow(defaultBufSize);            }            impl.init(orb, bufMgr);            impl.setParent(this);        } else {            impl = OutputStreamFactory.newOutputStream(version);            BufferManagerWrite bufMgr                = BufferManagerFactory.newBufferManagerWrite(version, orb);            impl.init(orb, bufMgr);            impl.setParent(this);        }    }    // org.omg.CORBA.portable.OutputStream    // Provided by IIOPOutputStream and EncapsOutputStream    public abstract org.omg.CORBA.portable.InputStream create_input_stream();    public final void write_boolean(boolean value) {        impl.write_boolean(value);    }    public final void write_char(char value) {        impl.write_char(value);    }    public final void write_wchar(char value) {        impl.write_wchar(value);    }    public final void write_octet(byte value) {        impl.write_octet(value);    }    public final void write_short(short value) {        impl.write_short(value);    }    public final void write_ushort(short value) {        impl.write_ushort(value);    }    public final void write_long(int value) {        impl.write_long(value);    }    public final void write_ulong(int value) {        impl.write_ulong(value);    }    public final void write_longlong(long value) {        impl.write_longlong(value);    }    public final void write_ulonglong(long value) {        impl.write_ulonglong(value);    }    public final void write_float(float value) {        impl.write_float(value);    }    public final void write_double(double value) {        impl.write_double(value);    }    public final void write_string(String value) {        impl.write_string(value);    }    public final void write_wstring(String value) {        impl.write_wstring(value);    }    public final void write_boolean_array(boolean[] value, int offset, int length) {        impl.write_boolean_array(value, offset, length);    }    public final void write_char_array(char[] value, int offset, int length) {        impl.write_char_array(value, offset, length);    }    public final void write_wchar_array(char[] value, int offset, int length) {        impl.write_wchar_array(value, offset, length);    }    public final void write_octet_array(byte[] value, int offset, int length) {        impl.write_octet_array(value, offset, length);    }    public final void write_short_array(short[] value, int offset, int length) {        impl.write_short_array(value, offset, length);    }    public final void write_ushort_array(short[] value, int offset, int length) {        impl.write_ushort_array(value, offset, length);    }    public final void write_long_array(int[] value, int offset, int length) {        impl.write_long_array(value, offset, length);    }    public final void write_ulong_array(int[] value, int offset, int length) {        impl.write_ulong_array(value, offset, length);    }    public final void write_longlong_array(long[] value, int offset, int length) {        impl.write_longlong_array(value, offset, length);    }    public final void write_ulonglong_array(long[] value, int offset, int length) {        impl.write_ulonglong_array(value, offset, length);    }    public final void write_float_array(float[] value, int offset, int length) {        impl.write_float_array(value, offset, length);    }    public final void write_double_array(double[] value, int offset, int length) {        impl.write_double_array(value, offset, length);    }    public final void write_Object(org.omg.CORBA.Object value) {        impl.write_Object(value);    }    public final void write_TypeCode(TypeCode value) {        impl.write_TypeCode(value);    }    public final void write_any(Any value) {        impl.write_any(value);    }    public final void write_Principal(Principal value) {        impl.write_Principal(value);    }    public final void write(int b) throws java.io.IOException {        impl.write(b);    }        public final void write_fixed(java.math.BigDecimal value) {        impl.write_fixed(value);    }    public final void write_Context(org.omg.CORBA.Context ctx,			      org.omg.CORBA.ContextList contexts) {        impl.write_Context(ctx, contexts);    }    public final org.omg.CORBA.ORB orb() {        return impl.orb();    }    // org.omg.CORBA_2_3.portable.OutputStream    public final void write_value(java.io.Serializable value) {        impl.write_value(value);    }    public final void write_value(java.io.Serializable value, java.lang.Class clz) {        impl.write_value(value, clz);    }    public final void write_value(java.io.Serializable value, String repository_id) {        impl.write_value(value, repository_id);    }    public final void write_value(java.io.Serializable value,                             org.omg.CORBA.portable.BoxedValueHelper factory) {        impl.write_value(value, factory);    }    public final void write_abstract_interface(java.lang.Object obj) {        impl.write_abstract_interface(obj);    }    // java.io.OutputStream    public final void write(byte b[]) throws IOException {        impl.write(b);    }    public final void write(byte b[], int off, int len) throws IOException {        impl.write(b, off, len);    }    public final void flush() throws IOException {        impl.flush();    }    public final void close() throws IOException {        impl.close();    }    // com.sun.corba.se.internal.core.MarshalOutputStream    public final void start_block() {        impl.start_block();    }    public final void end_block() {        impl.end_block();    }    public final void putEndian() {        impl.putEndian();    }    // Overridden by IIOPOutputStream    public void writeTo(java.io.OutputStream stream) throws IOException {        impl.writeTo(stream);    }    public final byte[] toByteArray() {        return impl.toByteArray();    }    // org.omg.CORBA.DataOutputStream    public final void write_Abstract (java.lang.Object value) {        impl.write_Abstract(value);    }    public final void write_Value (java.io.Serializable value) {        impl.write_Value(value);    }    public final void write_any_array(org.omg.CORBA.Any[] seq, int offset, int length) {        impl.write_any_array(seq, offset, length);    }    // org.omg.CORBA.portable.ValueBase    public final String[] _truncatable_ids() {        return impl._truncatable_ids();    }    // Other    protected final int getSize() {        return impl.getSize();    }    protected final int getIndex() {        return impl.getIndex();    }    protected int getRealIndex(int index) {        // Used in indirections. Overridden by TypeCodeOutputStream.        return index;    }    protected final void setIndex(int value) {        impl.setIndex(value);    }    protected final byte[] getByteBuffer() {        return impl.getByteBuffer();    }    protected final void setByteBuffer(byte value[]) {        impl.setByteBuffer(value);    }    public final boolean isLittleEndian() {        return impl.isLittleEndian();    }    protected final ByteBufferWithInfo getByteBufferWithInfo() {        return impl.getByteBufferWithInfo();    }    protected final void setByteBufferWithInfo(ByteBufferWithInfo bbwi) {        impl.setByteBufferWithInfo(bbwi);    }    protected final BufferManagerWrite getBufferManager() {        return impl.getBufferManager();    }    public final void write_fixed(java.math.BigDecimal bigDecimal, short digits, short scale) {        impl.write_fixed(bigDecimal, digits, scale);    }    public final void writeOctetSequenceTo(org.omg.CORBA.portable.OutputStream s) {        impl.writeOctetSequenceTo(s);    }    public final GIOPVersion getGIOPVersion() {        return impl.getGIOPVersion();    }    public final void writeIndirection(int tag, int posIndirectedTo) {        impl.writeIndirection(tag, posIndirectedTo);    }    // Use Latin-1 for GIOP 1.0 or when code set negotiation was not    // performed.    protected CodeSetConversion.CTBConverter createCharCTBConverter() {        return CodeSetConversion.impl().getCTBConverter(OSFCodeSetRegistry.ISO_8859_1);    }    // Subclasses must decide what to do here.  It's inconvenient to    // make the class and this method abstract because of dup().    protected abstract CodeSetConversion.CTBConverter createWCharCTBConverter();    protected final void freeInternalCaches() {        impl.freeInternalCaches();    }    void printBuffer() {        impl.printBuffer();    }    public void alignOnBoundary(int octetBoundary) {        impl.alignOnBoundary(octetBoundary);    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?