transient
| 日本語 | 一時的 |
| 英語 | transient |
| ふりがな | とらんじえんと |
| フリガナ | トランジエント |
直列化時に保存しないフィールドにつける予約語。
直列化(シリアライズ)されるクラスのフィールドにtransientを付けることで、そのフィールドはシリアライズしても保存されない。
保存されても意味がない場合に使用する。
直列化(シリアライズ)されるクラスのフィールドにtransientを付けることで、そのフィールドはシリアライズしても保存されない。
保存されても意味がない場合に使用する。
// Sample.java
import java.io.Serializable;
import java.io.IOException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
public class Sample
{
public static void main( String[] args )
{
// 出力ファイルの絶対パス。
// ファイルは存在しなくても構いません。
// というか存在すると上書きされます。
String filePath = "D:/Sample/serializable.data";
// 出力します。
// FileOutputStreamクラスの参照型変数。
// ここで作っておくのはfinallyでclose()メソッドを呼ぶためです。
FileOutputStream fileOutputStream = null;
try
{
// 書き込むデータを作ります。
SerializableData serializableData = new SerializableData();
serializableData.setData( 100 );
serializableData.setNotSavedData( 200 );
// FileOutputStreamクラスを作ります。
// ファイル出力用のストリームです。
fileOutputStream = new FileOutputStream( filePath );
// そのストリームを使って直列化可能なオブジェクトを
// 書き込むクラスObjectOutputStreamクラスを作ります。
ObjectOutputStream objectOutputStream = new ObjectOutputStream( fileOutputStream );
// データを書き込みます。
// ここで渡すクラスは「Serializableインターフェイスの実装クラス」
// である必要があります。
objectOutputStream.writeObject( serializableData );
objectOutputStream.flush();
}
catch( IOException e )
{
// ファイルが無かった場合等に、この
// IOException例外が投げられます。
e.printStackTrace();
return;
}
finally
{
// ファイルを扱ったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。close()メソッドを呼ぶのは
// FileOutputStreamだけです。
try
{
if( fileOutputStream != null )
{
fileOutputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
}
// 入力します。
// FileOutputStreamクラスの参照型変数。
// ここで作っておくのはfinallyでclose()メソッドを呼ぶためです。
FileInputStream fileInputStream = null;
try
{
// 今書き込んだデータを取り出します。
// FileInputStreamクラスを作ります。
// ファイル入力用のストリームです。
fileInputStream = new FileInputStream( filePath );
// そのストリームを使って、直列化可能なオブジェクトを
// 読み込むクラスObjectInputStreamクラスを作ります。
ObjectInputStream objectInputStream = new ObjectInputStream( fileInputStream );
// データを取り出します。
SerializableData serializableData = (SerializableData)objectInputStream.readObject();
System.out.println( serializableData.getData() );
System.out.println( serializableData.getNotSavedData() );
// 200
// 0
// このように、transientフィールドは保存されません。
}
catch( IOException e )
{
// ファイルが無かった場合等に、この
// IOException例外が投げられます。
e.printStackTrace();
return;
}
catch( ClassNotFoundException e )
{
// ObjectInputStream#readObject()メソッドがthrows指定している
// ClassNotFoundException例外を受け取ります。
e.printStackTrace();
return;
}
finally
{
// ファイルを扱ったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。close()メソッドを呼ぶのは
// FileInputStreamだけです。
try
{
if( fileInputStream != null )
{
fileInputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
}
}
}
/**
* 保存用データクラス。
* Serializableインターフェイスの実装クラスです。
*/
class SerializableData implements Serializable
{
/**
* 保存されるフィールド。
*/
private int data;
/**
* getter。
*/
public int getData()
{
return data;
}
/**
* setter。
*/
public void setData( int value )
{
this.data = value;
}
/**
* 保存されないtransientフィールド。
*/
private transient int notSavedData;
/**
* getter。
*/
public int getNotSavedData()
{
return notSavedData;
}
/**
* setter。
*/
public void setNotSavedData( int value )
{
this.notSavedData = value;
}
}
import java.io.Serializable;
import java.io.IOException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
public class Sample
{
public static void main( String[] args )
{
// 出力ファイルの絶対パス。
// ファイルは存在しなくても構いません。
// というか存在すると上書きされます。
String filePath = "D:/Sample/serializable.data";
// 出力します。
// FileOutputStreamクラスの参照型変数。
// ここで作っておくのはfinallyでclose()メソッドを呼ぶためです。
FileOutputStream fileOutputStream = null;
try
{
// 書き込むデータを作ります。
SerializableData serializableData = new SerializableData();
serializableData.setData( 100 );
serializableData.setNotSavedData( 200 );
// FileOutputStreamクラスを作ります。
// ファイル出力用のストリームです。
fileOutputStream = new FileOutputStream( filePath );
// そのストリームを使って直列化可能なオブジェクトを
// 書き込むクラスObjectOutputStreamクラスを作ります。
ObjectOutputStream objectOutputStream = new ObjectOutputStream( fileOutputStream );
// データを書き込みます。
// ここで渡すクラスは「Serializableインターフェイスの実装クラス」
// である必要があります。
objectOutputStream.writeObject( serializableData );
objectOutputStream.flush();
}
catch( IOException e )
{
// ファイルが無かった場合等に、この
// IOException例外が投げられます。
e.printStackTrace();
return;
}
finally
{
// ファイルを扱ったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。close()メソッドを呼ぶのは
// FileOutputStreamだけです。
try
{
if( fileOutputStream != null )
{
fileOutputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
}
// 入力します。
// FileOutputStreamクラスの参照型変数。
// ここで作っておくのはfinallyでclose()メソッドを呼ぶためです。
FileInputStream fileInputStream = null;
try
{
// 今書き込んだデータを取り出します。
// FileInputStreamクラスを作ります。
// ファイル入力用のストリームです。
fileInputStream = new FileInputStream( filePath );
// そのストリームを使って、直列化可能なオブジェクトを
// 読み込むクラスObjectInputStreamクラスを作ります。
ObjectInputStream objectInputStream = new ObjectInputStream( fileInputStream );
// データを取り出します。
SerializableData serializableData = (SerializableData)objectInputStream.readObject();
System.out.println( serializableData.getData() );
System.out.println( serializableData.getNotSavedData() );
// 200
// 0
// このように、transientフィールドは保存されません。
}
catch( IOException e )
{
// ファイルが無かった場合等に、この
// IOException例外が投げられます。
e.printStackTrace();
return;
}
catch( ClassNotFoundException e )
{
// ObjectInputStream#readObject()メソッドがthrows指定している
// ClassNotFoundException例外を受け取ります。
e.printStackTrace();
return;
}
finally
{
// ファイルを扱ったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。close()メソッドを呼ぶのは
// FileInputStreamだけです。
try
{
if( fileInputStream != null )
{
fileInputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
}
}
}
/**
* 保存用データクラス。
* Serializableインターフェイスの実装クラスです。
*/
class SerializableData implements Serializable
{
/**
* 保存されるフィールド。
*/
private int data;
/**
* getter。
*/
public int getData()
{
return data;
}
/**
* setter。
*/
public void setData( int value )
{
this.data = value;
}
/**
* 保存されないtransientフィールド。
*/
private transient int notSavedData;
/**
* getter。
*/
public int getNotSavedData()
{
return notSavedData;
}
/**
* setter。
*/
public void setNotSavedData( int value )
{
this.notSavedData = value;
}
}
// Sample.java
import java.io.Serializable;
import java.io.IOException;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
public class Sample
{
public static void main( String[] args )
{
// 出力ファイルの絶対パス。
// ファイルは存在しなくても構いません。
// というか存在すると上書きされます。
String filePath = "D:/Sample/serializable.data";
// 出力します。
// FileOutputStreamクラスの参照型変数。
// ここで作っておくのはfinallyでclose()メソッドを呼ぶためです。
FileOutputStream fileOutputStream = null;
try
{
// 書き込むデータを作ります。
SerializableData serializableData = new SerializableData();
serializableData.setData( 100 );
serializableData.setNotSavedData( 200 );
// FileOutputStreamクラスを作ります。
// ファイル出力用のストリームです。
fileOutputStream = new FileOutputStream( filePath );
// そのストリームを使って直列化可能なオブジェクトを
// 書き込むクラスObjectOutputStreamクラスを作ります。
ObjectOutputStream objectOutputStream = new ObjectOutputStream( fileOutputStream );
// データを書き込みます。
// ここで渡すクラスは「Serializableインターフェイスの実装クラス」
// である必要があります。
objectOutputStream.writeObject( serializableData );
objectOutputStream.flush();
}
catch( IOException e )
{
// ファイルが無かった場合等に、この
// IOException例外が投げられます。
e.printStackTrace();
return;
}
finally
{
// ファイルを扱ったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。close()メソッドを呼ぶのは
// FileOutputStreamだけです。
try
{
if( fileOutputStream != null )
{
fileOutputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
}
// 入力します。
// FileOutputStreamクラスの参照型変数。
// ここで作っておくのはfinallyでclose()メソッドを呼ぶためです。
FileInputStream fileInputStream = null;
try
{
// 今書き込んだデータを取り出します。
// FileInputStreamクラスを作ります。
// ファイル入力用のストリームです。
fileInputStream = new FileInputStream( filePath );
// そのストリームを使って、直列化可能なオブジェクトを
// 読み込むクラスObjectInputStreamクラスを作ります。
ObjectInputStream objectInputStream = new ObjectInputStream( fileInputStream );
// データを取り出します。
SerializableData serializableData = (SerializableData)objectInputStream.readObject();
System.out.println( serializableData.getData() );
System.out.println( serializableData.getNotSavedData() );
// 200
// 0
// このように、transientフィールドは保存されません。
}
catch( IOException e )
{
// ファイルが無かった場合等に、この
// IOException例外が投げられます。
e.printStackTrace();
return;
}
catch( ClassNotFoundException e )
{
// ObjectInputStream#readObject()メソッドがthrows指定している
// ClassNotFoundException例外を受け取ります。
e.printStackTrace();
return;
}
finally
{
// ファイルを扱ったら、最後にclose()メソッドを呼んで
// 後処理をします。また、これは必ず行うため、
// finally内で行います。close()メソッドを呼ぶのは
// FileInputStreamだけです。
try
{
if( fileInputStream != null )
{
fileInputStream.close();
}
}
catch( IOException e )
{
// close()メソッドはIOExceptionがthrows指定されているので
// 一応受け取ります。
e.printStackTrace();
}
}
}
}
/**
* 保存用データクラス。
* Serializableインターフェイスの実装クラスです。
*/
class SerializableData implements Serializable
{
/**
* 保存されるフィールド。
*/
private int data;
/**
* getter。
*/
public int getData()
{
return data;
}
/**
* setter。
*/
public void setData( int value )
{
this.data = value;
}
/**
* 保存されないtransientフィールド。
*/
private transient int notSavedData;
/**
* getter。
*/
public int getNotSavedData()
{
return notSavedData;
}
/**
* setter。
*/
public void setNotSavedData( int value )
{
this.notSavedData = value;
}
}




