com.yamicha.php.serialize
クラス PHPSerialize

java.lang.Object
  上位を拡張 com.yamicha.php.serialize.PHPSerialize
直系の既知のサブクラス:
PHPSerializeStream

public class PHPSerialize
extends java.lang.Object

このクラスは、PHP 直列化を実現します。
1.まず、文字コードを指定してインスタンスを生成します。
2.変換したいオブジェクトを用意します。オブジェクトは何型でも構いませんが、プリミティブ型はラップし、オブジェクトは Serialize をインプリメントしなければなりません。また、public フィールド以外は保存されません。
3.toSerializeBytes メソッドでバイト配列を取得するか、toSerializeString メソッドでそれを文字列にしたものを取得します。


コンストラクタの概要
PHPSerialize()
          文字コードを ascii とするコンストラクタです。
PHPSerialize(java.lang.String c)
          文字コードを指定するコンストラクタです。
 
メソッドの概要
 java.lang.String convertString(byte[] b)
          バイトデータを文字列に変換します。
 java.lang.String getEncoding()
          文字コードを取得します。
 int getPHPType(java.lang.Object obj)
          オブジェクトから PHP 変数型を判別します。
protected  byte[] objectSerialize(java.lang.Object obj)
          オブジェクトからクラス名を自動生成し、データを直列化します。
protected  byte[] objectSerialize(java.lang.String name, java.lang.Object obj)
          渡されたクラス名を用い、データを直列化します。
protected  byte[] objectSerialize(java.lang.String name, PHPVariable[] key, java.lang.Object[] value)
          渡されたクラス名、キー、値を用い、データを直列化します。
 void setEncoding(java.lang.String c)
          文字コードを指定します。
 byte[] toObjectSerialize(java.lang.String name, java.lang.Object obj)
          データと PHP クラス名を使用してデータを直列化します。
 byte[] toSerializeBytes(java.lang.Object o)
          データを直列化し、バイト配列に格納します。
protected  byte[] toSerializeData(java.lang.Object obj, PHPVariable po)
          データを直列化するメソッドです。
 java.lang.String toSerializeString(java.lang.Object obj)
          データを直列化し、文字列に変換します。
 byte[] toSerializeVariable(PHPVariable po)
          変数を直列化し、バイト配列に変換します。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

PHPSerialize

public PHPSerialize()
文字コードを ascii とするコンストラクタです。


PHPSerialize

public PHPSerialize(java.lang.String c)
文字コードを指定するコンストラクタです。この文字コードを使用してバイト配列への変換が行われます。

パラメータ:
c - 文字コード
メソッドの詳細

setEncoding

public void setEncoding(java.lang.String c)
文字コードを指定します。

パラメータ:
c - 新しい文字コード

getEncoding

public java.lang.String getEncoding()
文字コードを取得します。

戻り値:
現在の文字コード

getPHPType

public int getPHPType(java.lang.Object obj)
オブジェクトから PHP 変数型を判別します。
独自の型を使用したい場合は、これと toSerializeBytes メソッドもオーバーライドし、そこで独自型のみを判別し、それ以外の型についてはこれらのメソッドを super で呼び出してください。

パラメータ:
obj - 判定するオブジェクト。
戻り値:
PHP 変数型。PHPConstant で定義されている。

toSerializeString

public java.lang.String toSerializeString(java.lang.Object obj)
データを直列化し、文字列に変換します。
文字列は、指定された文字コードによって変換され、生成されます。

パラメータ:
obj - 変換するオブジェクト。
戻り値:
データ直列化後の文字列表現。

convertString

public java.lang.String convertString(byte[] b)
                               throws java.io.UnsupportedEncodingException
バイトデータを文字列に変換します。
文字列は、指定された文字コードによって変換され、生成されます。

パラメータ:
b - バイトデータ。
戻り値:
変換後の文字列。
例外:
java.io.UnsupportedEncodingException - 文字エンコードがサポートされていない。

toSerializeBytes

public byte[] toSerializeBytes(java.lang.Object o)
                        throws java.io.UnsupportedEncodingException,
                               java.io.IOException
データを直列化し、バイト配列に格納します。
文字列に変換する場合と違い、バイナリデータが欠損しません。バイナリデータを使用する際は、必ずこちらを用いてください。
String 型表現がある場合、指定された文字コードによってバイト配列に変換されます。

パラメータ:
o - 変換するオブジェクト。
戻り値:
データ直列化後の文字列表現。
例外:
java.io.UnsupportedEncodingException - 文字コードがサポートされていない。
java.io.IOException - バイト配列の出入力に失敗した。

toSerializeVariable

public byte[] toSerializeVariable(PHPVariable po)
                           throws java.io.UnsupportedEncodingException,
                                  java.io.IOException
変数を直列化し、バイト配列に変換します。
変数だけを直列化することはないため、プログラマーがこれを直接用いることはあまりないでしょう。返される表現は、基本的に PHPVariable.toString() と同じです。

パラメータ:
po - PHPVariable 型の変数。
戻り値:
データ直列化後の変数名データ。
例外:
java.io.UnsupportedEncodingException - 文字コードがサポートされていない。
java.io.IOException - バイト配列の出入力に失敗した。

toSerializeData

protected byte[] toSerializeData(java.lang.Object obj,
                                 PHPVariable po)
                          throws java.io.UnsupportedEncodingException,
                                 java.io.IOException
データを直列化するメソッドです。
独自の型を使用する場合、これをオーバーライドすることができます。その際、必ず super を用いてこのメソッドを呼び出してください。 なお、obj 引数には様々な型を用いることができます。具体的には以下のように変換されます。
Integer , Short , Long : PHP_INTEGER
Float , Double : PHP_FLOAT
String : PHP_STRING
byte[] : PHP_BINARY
byte[] 以外の配列 : PHP_ARRAY
Hashtable : PHP_HASH
null , PHPUndef : PHP_UNDEF
Serializable をインプリメントしたその他のオブジェクト : PHP_OBJECT(そのクラスの public フィールドが直列化される)
Serializable をインプリメントしないその他のオブジェクト : PHP_UNSERIALOBJECT(PHP_UNDEF と同じ扱い)
なお、多次元配列を渡すことも可能であり、Object の配列の 1 つ目に Integer、2 つ目に String のように、型を混在させることもできます。
Hashtable 型に Hashtable を入れ込んだり、普通の配列に Hashtable を入れ込むなど、(ハッシュ)配列の中に(ハッシュ)配列を作ることも可能です。
Hashtable のキー値については、Stringを渡すのが普通ですが、Integer を渡せば数字添字とみなされます。両者の混在も可能です。これは、PHP では文字添字と数字添字の混在が可能であるためです。

パラメータ:
obj - 変換するオブジェクト。変数名を表す場合は String。
po - 変数の場合は、その定義が格納された PHPVariable。変数名以外の場合は null。
例外:
java.io.UnsupportedEncodingException - 文字コードがサポートされていない。
java.io.IOException - バイト配列の出入力に失敗した。

toObjectSerialize

public byte[] toObjectSerialize(java.lang.String name,
                                java.lang.Object obj)
                         throws java.io.UnsupportedEncodingException,
                                java.io.IOException
データと PHP クラス名を使用してデータを直列化します。

パラメータ:
name - PHP で用いるクラス名。
obj - 変換するオブジェクト。
戻り値:
直列化後のデータ。引数 obj が PHP_OBJECT 以外なら null。
例外:
java.io.UnsupportedEncodingException - 文字コードがサポートされていない。
java.io.IOException - バイト配列の出入力に失敗した。

objectSerialize

protected byte[] objectSerialize(java.lang.Object obj)
                          throws java.io.UnsupportedEncodingException,
                                 java.io.IOException
オブジェクトからクラス名を自動生成し、データを直列化します。

パラメータ:
obj - 変換するオブジェクト。
戻り値:
直列化後のデータ。
例外:
java.io.UnsupportedEncodingException - 文字コードがサポートされていない。
java.io.IOException - バイト配列の出入力に失敗した。

objectSerialize

protected byte[] objectSerialize(java.lang.String name,
                                 java.lang.Object obj)
                          throws java.io.UnsupportedEncodingException,
                                 java.io.IOException
渡されたクラス名を用い、データを直列化します。

パラメータ:
name - PHP クラス名。
obj - 変換するオブジェクト。
戻り値:
直列化後のデータ。
例外:
java.io.UnsupportedEncodingException - 文字コードがサポートされていない。
java.io.IOException - バイト配列の出入力に失敗した。

objectSerialize

protected byte[] objectSerialize(java.lang.String name,
                                 PHPVariable[] key,
                                 java.lang.Object[] value)
                          throws java.io.UnsupportedEncodingException,
                                 java.io.IOException
渡されたクラス名、キー、値を用い、データを直列化します。

パラメータ:
name - PHP クラス名。
key - PHPVariable の配列。
value - データの配列。
戻り値:
直列化後のデータ。
例外:
java.io.UnsupportedEncodingException - 文字コードがサポートされていない。
java.io.IOException - バイト配列の出入力に失敗した。