`

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对象序列化保存为XML文件的工具类

    `XMLEncoder`是一个用于将Java对象编码为XML输出流的类,它能够将对象的属性和结构转换为XML格式。而`XMLDecoder`则相反,它可以解析XML输入流并重建原始的Java对象。这两个工具使得在XML和Java对象之间进行序列化和...

    java 对象流 的用法

    Java对象流是Java IO库中的一个重要概念,它允许我们将Java对象序列化和反序列化,以便持久化数据或在网络间传输。在这个过程中,对象被转换为字节流,然后可以写入文件或通过网络发送,反之亦然。下面将详细探讨...

    String1.java

    在Java编程语言中,字符串处理是一项非常重要的技能,无论是进行数据处理还是用户交互,字符串都是一个不可或缺的数据类型。本篇将基于提供的`String1.java`代码示例,深入探讨如何创建并操作字符串对象。 #### 一...

    Java将pdf文件转换成String

    1. **Apache Commons Logging**:这是一个日志抽象层,允许开发者选择不同的日志实现,如Log4j、Java Util Logging等,而无需修改代码。 2. **Fontbox**:PDFBox的一个子项目,专门用于处理PDF中的字体信息,这对于...

    java 对象的序列化与反序列化

    在Java中,序列化(Serialization)是指将一个对象转换为字节流的过程,这个字节流可以保存到磁盘上,或者通过网络进行传输。要实现一个对象的序列化,该对象的类必须实现`Serializable`接口。这是一个标记接口,...

    使用Betwixt将XML转为JAVA Bean(内有JAR包)

    本教程将通过一个具体的例子,讲解如何使用Betwixt将XML数据转换为Java Bean,特别是处理XML中相同节点名的情况。 首先,我们需要了解Betwixt的基本概念。Betwixt基于JavaBeans规范,通过反射和注解来实现XML和Java...

    Java输入输出流

    在Java IO中,通常的做法是在一个基础流之上添加一个或多个过滤流,每个过滤流都增加了额外的功能,但仍然保持原始流的接口不变。 - **Java虚拟机读写其他进程的数据**:在某些场景下,需要让一个Java进程读取或写入...

    java 对象序列化

    Java对象序列化是一种将Java对象转换为字节流的过程,以便可以存储在磁盘上、在网络上传输或在任何其他需要持久化数据的场景中使用。这个过程涉及到两个主要概念:序列化(Marshalling)和反序列化(Unmarshalling)...

    java io 流,文件读取操作

    数据流是一种特殊的流类型,用于存取 Java 原始数据类型,如 long、boolean 等。数据流是字节流,提供了可以存取 Java 原始数据类型的能力。常见的数据流类型有 DataInputStream 和 DataOutputStream。 十一、...

    java 去掉重复字符 三个方法

    在这个方法中,我们首先创建一个空的HashSet,然后遍历字符串的每个字符。如果字符不在集合中,我们就将其添加到集合和结果字符串中。最后返回结果字符串。 ### 方法二:StringBuilder与while循环 我们也可以使用`...

    流密码 java实现

    流密码(Stream Cipher)是一种密码编码技术,它在加密数据时以比特流的方式进行,将原始数据和密钥流逐位进行异或操作,从而实现数据的加密。在Java中实现流密码涉及到对密码学原理的理解以及Java I/O和位操作的...

    小型的_聊天模块 使用属性文件开放 java

    在构建一个小型的聊天模块时,使用属性文件来开放Java应用程序是一种常见的做法。属性文件是文本格式的配置文件,它们通常被用来存储程序中的固定设置或动态数据,如用户登录信息。这种做法使得代码与配置分离,提高...

    Java软件开发实战 Java基础与案例开发详解 13-7 数据流 共6页.pdf

    根据给定文件的信息,我们可以提炼出关于Java软件开发中数据流相关的知识点,特别是针对`DataInputStream`类及其在文件和内存中的使用。 ### 13.7 数据流 #### DataInputStream 类 `DataInputStream`是Java中用于...

    android图片转换成数据流的形式保存

    根据提供的文件信息,本文将详细解释如何在Android中将图片转换为数据流形式进行保存,同时探讨相关的技术细节与应用场景。 ### Android图片转换为数据流形式保存 在Android开发过程中,有时我们需要将图片以数据...

    Java的输入 输出流PPT教案学习.pptx

    此外,`DataInputStream`还可以读取Java的原始数据类型,如`readInt()`和`writeDouble()`等。 3. 打印流(Print Streams): 打印流是字符流的一种,主要用于向输出设备(如屏幕、文件)打印格式化或非格式化的文本...

    数据流读与写操作手册

    数据流读写是Java编程中不可或缺的部分,涉及对文件、网络和内存的数据传输。本文将详细介绍数据流的读写操作,以及如何利用缓冲区提高性能。 1. **字节流和字符流的区别** - 字节流:Java的`InputStream`和`...

    Java《面向对象程序设计》实验报告七

    这个实验旨在帮助学生掌握Java中的输入输出流,包括标准数据流、文件流、数据输入输出流和对象流的使用,理解Java系统数据流的构成,以及如何利用面向对象的方法处理实际问题。通过这三个任务,学生可以深入理解文件...

    Java基础:减少对象的创建提高java性能

    例如,`String`类是Java中一个典型的例子,由于其不可变性,每次对`String`进行操作(如连接、截取等)都会生成新的对象。这在高频率操作时会显著增加对象创建的开销。 文章中给出了一个`BadRegExpMatcher`和`...

    javaIO(java中的流的介绍)

    在Java中,流(Stream)是IO系统的核心概念,它们可以被视为数据的序列,既可以读取(Input Stream)也可以写入(Output Stream)。 1. 输入流(Input Stream) - InputStream:所有输入流的基类,用于读取原始...

    驾驭Java文件与IO:深入探索数据流的奥秘

    # 驾驭Java文件与I/O:深入探索数据流的奥秘 Java作为一种广泛应用的编程语言,在多种软件开发场景中扮演着重要角色。本文旨在深入解析Java在处理文件及I/O操作方面的能力,帮助读者更好地理解并掌握相关技术。 ##...

Global site tag (gtag.js) - Google Analytics