/*
* 練習問題20.7 p.473
* 第3章のAttrクラスへ、DataOutputStreamにオブジェクトの内容を書き込むメソッドを追加しなさい。
* また、DataInputStreamから状態を読み込むコンストラクタを追加しなさい。
*/
/*
* 練習問題3.7 p.87
* ColorAttrに対してequalsとhashCodeをオーバーライドしなさい。
*/
package ch20.ex20_07;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class Attr
{
private final String name;
private Object value = null;
public Attr(String name)
{
this.name = name;
}
public Attr(String name, Object value)
{
this.name = name;
this.value = value;
}
public Attr(String name, DataInputStream in)
{
this.name = name;
try
{
this.value = in.readUTF();
}
catch(Exception e)
{
System.out.println("input data constructor: " + e);
}
}
public String getName()
{
return name;
}
public Object getValue()
{
return value;
}
public Object setValue(Object newValue)
{
Object oldVal = value;
value = newValue;
return oldVal;
}
public String toString()
{
return name + "='" + value + "'";
}
public void outputData(String file)
{
try
{
OutputStream fout = new FileOutputStream(file);
DataOutputStream out = new DataOutputStream(fout);
out.writeUTF(value.toString());
}
catch(Exception e)
{
System.out.println("outputData: " + e);
}
}
public static void main(String[] args)
{
Attr test1 = new Attr("testName", "testValue");
System.out.println(test1);
test1.outputData("JPL/ch20/ex20_07/test.dat");
try
{
InputStream fin = new FileInputStream("JPL/ch20/ex20_07/test.dat");
DataInputStream in = new DataInputStream(fin);
Attr test2 = new Attr("testName2", in);
System.out.println(test2);
}
catch(Exception e)
{
System.out.println("input data: " + e);
}
}
}