/* * Copyright 2011 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.dev.util; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.io.Serializable; /** * Wrapper around a {@link DiskCache} token that allows easy serialization. */ public class DiskCacheToken implements Serializable { private transient DiskCache diskCache; private transient long token; /** * Create a wrapper for a token associated with {@link DiskCache#INSTANCE}. */ public DiskCacheToken(long token) { this(DiskCache.INSTANCE, token); } /** * Create a wrapper for a token associated with the given diskCache. */ DiskCacheToken(DiskCache diskCache, long token) { assert token >= 0; this.diskCache = diskCache; this.token = token; } /** * Retrieve the underlying bytes. * * @return the bytes that were written */ public synchronized byte[] readByteArray() { return diskCache.readByteArray(token); } /** * Deserialize the underlying bytes as an object. * * @param <T> the type of the object to deserialize * @param type the type of the object to deserialize * @return the deserialized object */ public <T> T readObject(Class<T> type) { return diskCache.readObject(token, type); } /** * Read the underlying bytes as a String. * * @return the String that was written */ public String readString() { return diskCache.readString(token); } /** * Writes the underlying bytes into the specified output stream. * * @param out the stream to write into */ public synchronized void transferToStream(OutputStream out) { diskCache.transferToStream(token, out); } private void readObject(ObjectInputStream inputStream) { diskCache = DiskCache.INSTANCE; token = diskCache.transferFromStream(inputStream); } private void writeObject(ObjectOutputStream outputStream) { diskCache.transferToStream(token, outputStream); } }