001 package org.bukkit.util.io; 002 003 import java.io.IOException; 004 import java.io.ObjectOutputStream; 005 import java.io.OutputStream; 006 import java.io.Serializable; 007 008 import org.bukkit.configuration.serialization.ConfigurationSerializable; 009 010 /** 011 * This class is designed to be used in conjunction with the {@link 012 * ConfigurationSerializable} API. It translates objects to an internal 013 * implementation for later deserialization using {@link 014 * BukkitObjectInputStream}. 015 * <p> 016 * Behavior of implementations extending this class is not guaranteed across 017 * future versions. 018 */ 019 public class BukkitObjectOutputStream extends ObjectOutputStream { 020 021 /** 022 * Constructor provided to mirror super functionality. 023 * 024 * @throws IOException 025 * @throws SecurityException 026 * @see ObjectOutputStream#ObjectOutputStream() 027 */ 028 protected BukkitObjectOutputStream() throws IOException, SecurityException { 029 super(); 030 super.enableReplaceObject(true); 031 } 032 033 /** 034 * Object output stream decoration constructor. 035 * 036 * @param out 037 * @throws IOException 038 * @see ObjectOutputStream#ObjectOutputStream(OutputStream) 039 */ 040 public BukkitObjectOutputStream(OutputStream out) throws IOException { 041 super(out); 042 super.enableReplaceObject(true); 043 } 044 045 @Override 046 protected Object replaceObject(Object obj) throws IOException { 047 if (!(obj instanceof Serializable) && (obj instanceof ConfigurationSerializable)) { 048 obj = Wrapper.newWrapper((ConfigurationSerializable) obj); 049 } 050 051 return super.replaceObject(obj); 052 } 053 }