View Javadoc

    1   /*
    2    * Copyright 2012 The Netty Project
    3    *
    4    * The Netty Project licenses this file to you under the Apache License,
    5    * version 2.0 (the "License"); you may not use this file except in compliance
    6    * with the License. You may obtain a copy of the License at:
    7    *
    8    *   http://www.apache.org/licenses/LICENSE-2.0
    9    *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
    12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
    13   * License for the specific language governing permissions and limitations
    14   * under the License.
    15   */
    16  package org.jboss.netty.handler.codec.serialization;
    17
    18  import java.io.IOException;
    19  import java.io.ObjectOutputStream;
    20  import java.io.ObjectStreamClass;
    21  import java.io.OutputStream;
    22
    23  class CompactObjectOutputStream extends ObjectOutputStream {
    24
    25      static final int TYPE_FAT_DESCRIPTOR = 0;
    26      static final int TYPE_THIN_DESCRIPTOR = 1;
    27
    28      CompactObjectOutputStream(OutputStream out) throws IOException {
    29          super(out);
    30      }
    31
    32      @Override
    33      protected void writeStreamHeader() throws IOException {
    34          writeByte(STREAM_VERSION);
    35      }
    36
    37      @Override
    38      protected void writeClassDescriptor(ObjectStreamClass desc) throws IOException {
    39          Class<?> clazz = desc.forClass();
    40          if (clazz.isPrimitive() || clazz.isArray() || clazz.isInterface() ||
    41              desc.getSerialVersionUID() == 0) {
    42              write(TYPE_FAT_DESCRIPTOR);
    43              super.writeClassDescriptor(desc);
    44          } else {
    45              write(TYPE_THIN_DESCRIPTOR);
    46              writeUTF(desc.getName());
    47          }
    48      }
    49  }