`

java如何用原始数据流保存一个含有string属性的对象

阅读更多
   在原始数据流中可以用其本身的方法方便的将对象stu的基本数据类型保存和读取。
   但是对于字符串string,写入文件的时候只有一个writeChars(String s)方法,而且这个方法是将一个字符串分解成一个个的字符写入文件,这样在读取的时候便不能直接读出字符串了。
   我想到的方法是在保存对象stu的时候,一遇到字符串型的属性,便先保存一个byte,这个byte中存放之后要保存的字符串中字符的个数,这样的话在读取的时候我们先读取出了字符串的个数,就可以再后面的读取中用一个for循环将这一个字符串中的字符挨个读取,并且将他们拼接起来,还原成一个字符串。
    这样就可以做到保存和读取一个含有字符串属性的对象了
    以下是代码:

学生类:Student.java

package NE524;

public class Student {
public Student(String name,byte age,float score,String disc) {
this.name = name;
this.age = age;
this.score = score;
this.disc = disc;
}
String name;
byte age;
float score;
String disc;
}

学生操作类:StudentOption.java


package NE524;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class StudentOption {
/**
* 主函数
* @param args
*/
public static void main(String[] args) {
File f = new File("E:\\11\\11\\c.txt");
Student stu = new Student("张三",(byte)10,60.0f,"小学生");
StudentOption so = new StudentOption();
so.saveStudent(f, stu);//将stu这个对象保存在文件f中
so.readStudent(f);//将保存在文件f中的对象stu读取出来
}
/**
* 将一个对象保存在一个文件中
* @param f 保存对象的文件
* @param stu 要保存的对象
*/
public void saveStudent(File f,Student stu){
try {
FileOutputStream fos = new FileOutputStream(f);
//包装成可写基本数据类型的输出流
DataOutputStream dos = new DataOutputStream(fos);
dos.writeByte(stu.name.length());//将学生姓名的字符个数保存下来,在读取时方便调用
dos.writeChars(stu.name);
dos.writeByte(stu.age);
dos.writeFloat(stu.score);
dos.writeByte(stu.disc.length());//将学生的描述的字符个数保存下来,在读取时方便调用
dos.writeChars(stu.disc);
dos.flush();
dos.close();


} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 将一个对象从文件中读取出来
* @param f 要从中读取对象的文件
*/
public void readStudent(File f){
try {
FileInputStream fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream(fis);
String name = "";//定义一个空字符串用来保存学生的名字
int i = dis.readByte();
for(;i>0;i--){//通过调用保存的学生名字字符数量,来将保存的字符一个一个拼接起来成为一个字符串
name+=dis.readChar();
}
System.out.println(name);//输出保存的学生名字
System.out.println(dis.readByte());//输出保存的学生年龄
System.out.println(dis.readFloat());//输出保存的学生分数
String disc = "";//定义一个空字符串来保存学生的描述
i = dis.readByte();
for(;i>0;i--){//通过调用保存的学生描述字符数量,来将保存的字符一个一个拼接起来成为一个字符串
disc+=dis.readChar();
}
System.out.println(disc);
} catch (Exception e) {
e.printStackTrace();
}
}
}

0
0
分享到:
评论

相关推荐

    JAVA面试题最全集

    ActiveX数据对象,是一个应用级程序接口. 75.四种JDBC方式?目前的版本? 76.EJB有哪几种?区别是什么? 77.JavaBean与EJB有什么区别? 78.软件开发生命周期有哪几个阶段? 79.软件开发有哪些因素? 80.软件开发中如何...

    Java之IO流学习总结

    LineNumberInputStream 主要完成从流中读取数据时,会得到相应的行号,至于什么时候分行、在哪里分行是由改类主动确定的,并不是在原始中有这样一个行号。在输出部分没有对应的部分,我们完全可以自己建立一个...

    java 面试题 总结

    Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类 booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble ...

    超级有影响力霸气的Java面试题大全文档

    Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型 封装类 boolean Boolean char Character byte Byte short Short int Integer long Long float Float double ...

    JAVA开发邮件跟踪代码

    (2) 通过java流处理技术从eml文件中读取整个文件内容,并把该内容存储在一个String对象中; (3) 考虑到邮件内容有相对稳定的格式,可通过设定相应的正则表达式从String对象中获取想要获得的邮件头信息; (4) 选择...

    Java面试宝典-经典

    24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段...

    Java面试宝典2010版

    24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段...

    java面试题大全(2012版)

    24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段...

    java输入语句scanner用法讲解.pdf

    Scanner类主要用于扫描输入文本,并可以从控制台、文件、输入流等读取原始数据,然后按照各种基本类型(如int、double、String等)的格式解析数据。 通过Scanner类,用户可以方便地在程序执行时,使用键盘输入数据...

    最新Java面试宝典pdf版

    24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段...

    Java面试笔试资料大全

    24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段...

    java面试宝典2012

    24. 写一个用jdbc连接并访问oracle数据的程序代码 121 25、Class.forName的作用?为什么要用? 121 26、大数据量下的分页解决方法。 121 27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 122 28、这段...

    JAVA面试宝典2010

    24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段...

    Java面试宝典2012新版

    24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段...

    Java面试宝典2012版

    24. 写一个用jdbc连接并访问oracle数据的程序代码 111 25、Class.forName的作用?为什么要用? 111 26、大数据量下的分页解决方法。 111 27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、...

    java面试宝典2012版.pdf

    10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? 11、"=="和equals方法究竟有什么区别? 12、静态变量和实例变量的区别? 13、是否可以从一个static方法内部发出对非static方法的调用? ...

    java范例开发大全源代码

     实例1 开发第一个Java程序 7  第2章 Java基础类型与运算符(教学视频:39分钟) 9  2.1 基础类型 9  实例2 自动提升 9  实例3 自动转换 10  实例4 常用基础类型之强制转换 11  2.2 运算符 12 ...

    java范例开发大全

    实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5 算术运算符 12 实例6 ...

Global site tag (gtag.js) - Google Analytics