这次我们小组讨论了关于一个JAVA的问题,在进行文件写出的时候出现了一个问题,
代码如下:
package com.io;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class Person implements Serializable{
privatestatic final long serialVersionUID = 1L;
privateString name;
privatechar gender;
privateint age;
publicPerson() {
super();
//TODO Auto-generated constructor stub
}
publicPerson(String name, char gender, int age) {
super();
this.name= name;
this.gender= gender;
this.age= age;
}
publicString getName() {
returnname;
}
publicvoid setName(String name) {
this.name= name;
}
publicchar getGender() {
returngender;
}
publicvoid setGender(char gender) {
this.gender= gender;
}
publicint getAge() {
returnage;
}
publicvoid setAge(int age) {
this.age= age;
}
}
public class TestInOut {
publicstatic void main(String[] args) throws ClassNotFoundException {
FileInputStreaminput=null;
FileOutputStreamout=null;
ObjectOutputStreamobjout=null;
ObjectInputStreamobjinp=null;
Personp=new Person("张飒",'男',20);
try{
System.out.println(System.getProperty("user.dir"));
input=newFileInputStream("d:/data.txt");
out=newFileOutputStream("d:/outobj.txt");
objout=newObjectOutputStream(out);
objout.writeObject(p);
FileInputStreamoutobj=new FileInputStream("d:/outobj.txt");
objinp=newObjectInputStream(outobj);
StringBuildersb=new StringBuilder();
intdata;
while((data=outobj.read())!=-1){
sb.append((char)data);
}
System.out.println(sb);
Personl=(Person)objinp.readObject();
System.out.println(l);
}catch (FileNotFoundException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try{
if(input!=null)
input.close();
if(out!=null)
out.close();
if(objout!=null)
objout.close();
if(objinp!=null)
objinp.close();
}catch(IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
我们发现,文件运行后出现错误
上面的代码是由
输出的,所以文件中的字节被输出来,但后面的却显示错误。
为此,我将前面的架空,想看看后面的代码能不能运算,结果成功了
于是我们小组开始各述己见,有人认为是文件名字打错了,还有人认为是代码中有错误,我觉得应该是文件的光标被read()方法弄到末尾,没有重新放到开头产生的错误。
但是,当我们寻找恢复光标的方法的时候却出现问题,在FileInputStream中是没有恢复光标的方法,恰好,老师刚好在课堂讲到,可以看看有没有继承父类方法,我们于是发现了mark()和reset(),但当我们用他们的时候,却被提示
显示不被支持,但是在帮助文档中却是继承父类方法,
我们尝试了多种方法,结果发现都不可行,
后来,我们在查到缓冲流时发现有路子,
我们尝试后发现可行
上面的输出时文件的字节输出,下面的是字符输出,
这次的事情提示我们,要注意将文件的光标向开头放置,不然会出现错误。
5Z00y���