binaryinputcapsule.java
来自「java 3d game jme 工程开发源代码」· Java 代码 · 共 1,264 行 · 第 1/4 页
JAVA
1,264 行
/*
* Copyright (c) 2003-2009 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package com.jme.util.export.binary;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import java.nio.ShortBuffer;
import java.util.ArrayList;
import java.util.BitSet;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.jme.util.export.ByteUtils;
import com.jme.util.export.InputCapsule;
import com.jme.util.export.Savable;
import com.jme.util.geom.BufferUtils;
/**
* @author Joshua Slack
*/
public class BinaryInputCapsule implements InputCapsule {
private static final Logger logger = Logger
.getLogger(BinaryInputCapsule.class.getName());
protected BinaryImporter importer;
protected BinaryClassObject cObj;
protected HashMap<Byte, Object> fieldData;
protected int index = 0;
public BinaryInputCapsule(BinaryImporter importer, BinaryClassObject bco) {
this.importer = importer;
this.cObj = bco;
}
public void setContent(byte[] content, int start, int limit) {
fieldData = new HashMap<Byte, Object>();
for (index = start; index < limit;) {
byte alias = content[index];
index++;
try {
byte type = cObj.aliasFields.get(alias).type;
Object value = null;
switch (type) {
case BinaryClassField.BITSET: {
value = readBitSet(content);
break;
}
case BinaryClassField.BOOLEAN: {
value = readBoolean(content);
break;
}
case BinaryClassField.BOOLEAN_1D: {
value = readBooleanArray(content);
break;
}
case BinaryClassField.BOOLEAN_2D: {
value = readBooleanArray2D(content);
break;
}
case BinaryClassField.BYTE: {
value = readByte(content);
break;
}
case BinaryClassField.BYTE_1D: {
value = readByteArray(content);
break;
}
case BinaryClassField.BYTE_2D: {
value = readByteArray2D(content);
break;
}
case BinaryClassField.BYTEBUFFER: {
value = readByteBuffer(content);
break;
}
case BinaryClassField.DOUBLE: {
value = readDouble(content);
break;
}
case BinaryClassField.DOUBLE_1D: {
value = readDoubleArray(content);
break;
}
case BinaryClassField.DOUBLE_2D: {
value = readDoubleArray2D(content);
break;
}
case BinaryClassField.FLOAT: {
value = readFloat(content);
break;
}
case BinaryClassField.FLOAT_1D: {
value = readFloatArray(content);
break;
}
case BinaryClassField.FLOAT_2D: {
value = readFloatArray2D(content);
break;
}
case BinaryClassField.FLOATBUFFER: {
value = readFloatBuffer(content);
break;
}
case BinaryClassField.FLOATBUFFER_ARRAYLIST: {
value = readFloatBufferArrayList(content);
break;
}
case BinaryClassField.BYTEBUFFER_ARRAYLIST: {
value = readByteBufferArrayList(content);
break;
}
case BinaryClassField.INT: {
value = readInt(content);
break;
}
case BinaryClassField.INT_1D: {
value = readIntArray(content);
break;
}
case BinaryClassField.INT_2D: {
value = readIntArray2D(content);
break;
}
case BinaryClassField.INTBUFFER: {
value = readIntBuffer(content);
break;
}
case BinaryClassField.LONG: {
value = readLong(content);
break;
}
case BinaryClassField.LONG_1D: {
value = readLongArray(content);
break;
}
case BinaryClassField.LONG_2D: {
value = readLongArray2D(content);
break;
}
case BinaryClassField.SAVABLE: {
value = readSavable(content);
break;
}
case BinaryClassField.SAVABLE_1D: {
value = readSavableArray(content);
break;
}
case BinaryClassField.SAVABLE_2D: {
value = readSavableArray2D(content);
break;
}
case BinaryClassField.SAVABLE_ARRAYLIST: {
value = readSavableArray(content);
break;
}
case BinaryClassField.SAVABLE_ARRAYLIST_1D: {
value = readSavableArray2D(content);
break;
}
case BinaryClassField.SAVABLE_ARRAYLIST_2D: {
value = readSavableArray3D(content);
break;
}
case BinaryClassField.SAVABLE_MAP: {
value = readSavableMap(content);
break;
}
case BinaryClassField.STRING_SAVABLE_MAP: {
value = readStringSavableMap(content);
break;
}
case BinaryClassField.SHORT: {
value = readShort(content);
break;
}
case BinaryClassField.SHORT_1D: {
value = readShortArray(content);
break;
}
case BinaryClassField.SHORT_2D: {
value = readShortArray2D(content);
break;
}
case BinaryClassField.SHORTBUFFER: {
value = readShortBuffer(content);
break;
}
case BinaryClassField.STRING: {
value = readString(content);
break;
}
case BinaryClassField.STRING_1D: {
value = readStringArray(content);
break;
}
case BinaryClassField.STRING_2D: {
value = readStringArray2D(content);
break;
}
default:
// skip put statement
continue;
}
fieldData.put(alias, value);
} catch (IOException e) {
logger.logp(Level.SEVERE, this.getClass().toString(),
"setContent(byte[] content)", "Exception", e);
}
}
}
public BitSet readBitSet(String name, BitSet defVal) throws IOException {
BinaryClassField field = cObj.nameFields.get(name);
if (field == null || !fieldData.containsKey(field.alias))
return defVal;
return (BitSet) fieldData.get(field.alias);
}
public boolean readBoolean(String name, boolean defVal) throws IOException {
BinaryClassField field = cObj.nameFields.get(name);
if (field == null || !fieldData.containsKey(field.alias))
return defVal;
return ((Boolean) fieldData.get(field.alias)).booleanValue();
}
public boolean[] readBooleanArray(String name, boolean[] defVal)
throws IOException {
BinaryClassField field = cObj.nameFields.get(name);
if (field == null || !fieldData.containsKey(field.alias))
return defVal;
return (boolean[]) fieldData.get(field.alias);
}
public boolean[][] readBooleanArray2D(String name, boolean[][] defVal)
throws IOException {
BinaryClassField field = cObj.nameFields.get(name);
if (field == null || !fieldData.containsKey(field.alias))
return defVal;
return (boolean[][]) fieldData.get(field.alias);
}
public byte readByte(String name, byte defVal) throws IOException {
BinaryClassField field = cObj.nameFields.get(name);
if (field == null || !fieldData.containsKey(field.alias))
return defVal;
return ((Byte) fieldData.get(field.alias)).byteValue();
}
public byte[] readByteArray(String name, byte[] defVal) throws IOException {
BinaryClassField field = cObj.nameFields.get(name);
if (field == null || !fieldData.containsKey(field.alias))
return defVal;
return (byte[]) fieldData.get(field.alias);
}
public byte[][] readByteArray2D(String name, byte[][] defVal)
throws IOException {
BinaryClassField field = cObj.nameFields.get(name);
if (field == null || !fieldData.containsKey(field.alias))
return defVal;
return (byte[][]) fieldData.get(field.alias);
}
public ByteBuffer readByteBuffer(String name, ByteBuffer defVal)
throws IOException {
BinaryClassField field = cObj.nameFields.get(name);
if (field == null || !fieldData.containsKey(field.alias))
return defVal;
return (ByteBuffer) fieldData.get(field.alias);
}
@SuppressWarnings("unchecked")
public ArrayList<ByteBuffer> readByteBufferArrayList(String name,
ArrayList<ByteBuffer> defVal) throws IOException {
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?