Java二进制文件示例

通过以下案例具体说明如何将数据存入二进制文件以及如何读取二进制文件。

问题:输入5个学生的信息(包含学号、姓名、3科成绩),统计各学生的总分,然后将学生信息和统计结果存入二进制数据文件STUDENT.DAT中。从STUDENT.DAT文件中读取数据,寻找平均分最高的学生,并输出该学生的所有信息。

解答:

import java.io.*;class Student {private String number, name;private double[] scores = new double[3];private double totalScore;public static final int NAME_SIZE = 40;public static final int NUMBER_SIZE = 20;public static final int RECORD_SIZE = 2 * NAME_SIZE + 2 * NUMBER_SIZE + 8 + 8 + 8 + 8;Student() {}Student(String num, String nam, double s0, double s1, double s2) {number = num;name = nam;scores[0] = s0;scores[1] = s1;scores[2] = s2;totalScore = s0 + s1 + s2;}public String getName() {return name;}public String getNumber() {return number;}public double getScores1() {return scores[0];}public double getScores2() {return scores[1];}public double getScores3() {return scores[2];}public double getTotalScore() {return totalScore=scores[0]+scores[1]+scores[2];}@Overridepublic String toString() {return getClass().getName()+ "[number=" + number+ ",name=" + name+ ",score1=" + scores[0]+ ",score2=" + scores[1]+ ",score3=" + scores[2]+ ",totalScore=" + getTotalScore()+ "]";}public void writeData(DataOutput out) throws IOException {DataIO.writeFixedString(number, NUMBER_SIZE, out);DataIO.writeFixedString(name, NAME_SIZE, out);out.writeDouble(scores[0]);out.writeDouble(scores[1]);out.writeDouble(scores[2]);out.writeDouble(totalScore);}public void readData(DataInput in) throws IOException {number = DataIO.readFixedString(NUMBER_SIZE, in);name = DataIO.readFixedString(NAME_SIZE, in);scores[0] = in.readDouble();scores[1] = in.readDouble();scores[2] = in.readDouble();totalScore = in.readDouble();}
}
public class Test {public static void main(String[] args) {Student[] s = new Student[5];s[0] = new Student("1", "小明", 78, 79, 80);s[1] = new Student("2", "小王", 88, 89, 90);s[2] = new Student("3", "小李", 98, 99, 100);s[3] = new Student("4", "小张", 108, 109, 110);s[4] = new Student("5", "小赵", 118, 119, 120);try {DataOutputStream out = new DataOutputStream(new FileOutputStream("STUDENT.DAT"));for (Student stu : s) {stu.writeData(out);}out.close();RandomAccessFile in = new RandomAccessFile("STUDENT.DAT", "r");int n = (int) (in.length() / Student.RECORD_SIZE);Student[] newStudent = new Student[n];for (int i = n - 1; i >= 0; i--) {newStudent[i] = new Student();in.seek(i * Student.RECORD_SIZE);newStudent[i].readData(in);}in.close();double highestScore = 0;int index = 0;for (int i = 0; i < n; i++) {if (newStudent[i].getTotalScore() > highestScore) {index = i;}}System.out.println("The highest average one is " + newStudent[index]);} catch (IOException e) {e.printStackTrace();}}
}
class DataIO {public static String readFixedString(int size, DataInput in) throws IOException {//之前少写了sizeStringBuilder b = new StringBuilder(size);int i = 0;boolean more = true;while (more && i < size) {char ch = in.readChar();i++;if (ch == 0) {more = false;} else {b.append(ch);}}in.skipBytes(2 * (size - i));return b.toString();}public static void writeFixedString(String s, int size, DataOutput out) throws IOException {for (int i = 0; i < size; i++) {char ch = 0;if (i < s.length()) {ch = s.charAt(i);}out.writeChar(ch);}}
}

Java二进制文件示例相关推荐

  1. 大数据 java 代码示例_功能Java示例 第7部分–将失败也视为数据

    大数据 java 代码示例 这是称为" Functional Java by Example"的系列文章的第7部分. 我在本系列的每个部分中开发的示例是某种"提要处理程序 ...

  2. java方法示例注释 @_Java 8中的功能接口是什么? @功能注释和示例

    java方法示例注释 @ 函数接口是Java 8最重要的概念之一,实际上为lambda表达式提供了动力,但是许多开发人员没有首先了解函数接口在Java 8中的作用就花了很多精力来理解它,并花时间学习l ...

  3. java 方法 示例_Java 9示例–收集的工厂方法–创建不可修改的列表,集合和映射...

    java 方法 示例 大家好,这是我在该博客上发表的有关Java 9功能的第一篇文章,今天您将了解我最喜欢的功能"收集的工厂方法" ,它是JEP 269的一部分.JEP代表JDK增 ...

  4. java 观察者模式示例_观察者设计模式示例

    java 观察者模式示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如 ...

  5. java 泛型示例_使用Java泛型的模板方法模式示例

    java 泛型示例 如果您发现除了某些部分外,您的许多例程完全相同,那么您可能需要考虑使用Template Method来消除容易出错的代码重复 . 这是一个示例:下面是两个做类似事情的类: 实例化并 ...

  6. java 设计模式 示例_Java中的状态设计模式–示例教程

    java 设计模式 示例 状态模式是行为设计模式之一 . 当对象根据其内部状态更改其行为时,将使用状态设计模式. 如果必须根据对象的状态更改其行为,则可以在对象中使用状态变量,并使用if-else条件 ...

  7. java 设计模式 示例_Java中的访问者设计模式–示例教程

    java 设计模式 示例 访客模式是行为设计模式之一 . 当我们必须对一组相似类型的对象执行操作时,将使用访问者模式. 借助访问者模式,我们可以将操作逻辑从对象移动到另一个类. 例如,假设有一个购物车 ...

  8. java 观察者模式示例_Java中的观察者设计模式-示例教程

    java 观察者模式示例 观察者模式是行为设计模式之一 . 当您对对象的状态感兴趣并希望在发生任何更改时得到通知时,观察者设计模式很有用. 在观察者模式中,监视另一个对象状态的对象称为Observer ...

  9. java 设计模式 示例_Java中的中介器设计模式-示例教程

    java 设计模式 示例 中介者模式是行为设计模式之一 ,因此它处理对象的行为. 中介器设计模式用于在系统中不同对象之间提供集中式通信介质. 根据GoF,中介者模式意图是: 通过封装不同对象集相互交互 ...

最新文章

  1. android 手机号分段_android 手机号分段_android系统实现手机号添加分割符
  2. 如何独立实现一个基于知识图谱的问答系统
  3. 通过putty和 winscp操作aws机器笔记
  4. [原创]Toolbar setNavigationIcon无效
  5. java 最快平衡几个值_Java 集合框架面试问题集锦
  6. idea打开linux命令行,在IDEA中使用Linux命令的操作方法
  7. 年终福利 | “社区之星”(年度贡献者)成长故事征集
  8. sqlplus连接oracle_Oracle数据库建立
  9. .NET应用程序与数据库交互的若干问题
  10. linux usb bulk传输,2.1.1.2. USB MSC Bulk-Only (BBB) Transport
  11. Java核心技术卷1:基础知识(原书第10版)
  12. iPad服务器怎样修复,如何修复iphone、ipad的Netflix错误11800
  13. 成功背后(敬所有IT人)
  14. android基础知识1
  15. ucore开启虚拟存储器过程详解
  16. 2011 imac 固态_iMac (21.5 英寸, 2011 年中) - 技术规格
  17. 如何甄选出一个优秀的软件供应商?by彭文华
  18. 谈一谈对JS闭包的理解
  19. PhotoShop 切片、标尺使用
  20. mysql list dbs_php mysql_list_dbs()函数用法示例

热门文章

  1. IBM Bluemix计划于2017年下半年在云资源中引入英特尔3D XPoint
  2. RestExpress response中addHeader 导致stackOverflow
  3. 创建最原始的XMLHttprequest对象
  4. Web Developer——瑞士军刀一样的FF插件
  5. Matlab7.0安装之后Runtime Error警告解决办法
  6. java border边框_简单实用的css边框属性border
  7. python中类的嵌套_python 中的嵌套类
  8. 计算机二级msoffice高级应用考试,全国计算机二级MSOffice高级应用考试大纲
  9. 语言 OJ 高低位逆转_用于检测污水井内水位高低的报警器--液位开关
  10. RemoteDebug iOS Webkit Adapter(适配器):一个可以让你(随时)随地调试Safari、 iOS WebView(的适配器)