尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Java学习进程13

Java学习进程13 Java IO流及游戏数据持久化开发线程游戏的实现 3本节课为介绍“飞机大战”游戏的更多功能主要实现排行榜、播放音频和读写文件操作的功能进而介绍了数据库、IO字节流、位运算、Java异常处理等知识点。数据库作用用来长期存放、批量管理大量数据的软件、文件系统优势支持快速增删改查、多程序同时访问、永久保存数据。数据库的分类1.关系型数据库数据以表格的形式存储适合存储玩家分数、昵称等结构化信息2.非关系型数据库无固定表格结构适合存储海量图片、缓存数据完整数据库安装配置复杂本篇使用文件字节流读写本地txt文件实现分数持久化、排行榜功能。IO流要实现排行榜功能需要“写入数据”和“读取数据”两个操作写入数据写入数据需要文件路径而文件路径需要文件对象写入数据时创建文件字节流File来创建文件对象抛弃异常后刷新管道强制写入保证数据写入管道。读取数据读取数据的操作和写入数据一样利用文件对象创建输入流同样要抛异常。输入流 输出流输入流InputStream数据从外面流向程序读数据站在程序的角度区分输入文件 - 程序输入读用于读取硬盘上的图片、音乐、txt文件、键盘录入文字输出流OutputStream数据从程序流向外面写数据站在程序的角度区分输出程序 - 文件输出写用于把程序内容保存到文件、向控制台打印文字而用于排行榜的文件字节流是万能流支持数字、音频和图片文件输出流FileOutputStream写入数据到本地文件文件输入流FileInputStream从本地文件读取数据特点以1个字节byte为最小单位读写单个字节取值范围0~255文件字节流实现分数持久化Q明明写入的数据是1000但读取到的数据是232怎么读写一个完整的整型数字原因:字节流能操作的数据大小读写数据以字节为单位一个字节最大值能存储2的八次方256所以直接写入一个字节能存储的最大值是256超过该数字后就没办法正常读写了那要怎么完整的写入先写入第一位然后右移8位即把高位字节的数据移到低位来再写入一次但是移动完之后要再读两次intscore1000;fos.write(score);// 第1字节低8位fos.write(score8);// 右移8位取出第2段字节fos.write(score16);// 右移16位取出第3段字节fos.write(score24);// 右移24位取出最高位第4字节fos.flush();那要怎么合成一个整形呢不是简单把两个数字相加可以通过右移写入数据也可以通过左移将数据合在一起即左移8位要写入4字才能把完整的字节写入将字节的移动写成一个方法再调用这个方法// 依次读取4个单字节inti1fis.read();inti2fis.read();inti3fis.read();inti4fis.read();// 左移拼接为完整int整数returni424|i316|i28|i1;Q4个字节才能合成一个intJava 中int整型固定占用4个字节32位二进制1字节 8位4 x 8 32位int 取值范围 -2147483648 ~ 2147483647如果只写 1/2/3 个字节高位数据丢失读取时数字错乱想要完整保存、读取任意 int 分数必须拆分为 4 个字节存储读取时 4 字节全部拼接还原。Q什么时候处理异常所有IO流操作FileInputStream / FileOutputStream、文件、音频必须处理异常文件不存在、文件损坏、权限不足、读写中断都会抛出 FileNotFoundException、IOException两种处理方式1.方法声明上 throws Exception 向上抛出见后续代码2.try-catch 包裹捕获异常自定义错误提示凡是和硬盘文件、外部资源交互的代码块都需要异常处理。returni424|i316|i28|i1;// 等价returni424|i316|i28|i10;注单竖线 | 按位或直接操作二进制每一位拼接字节专用参考示例代码继Java学习进程11Player类packagecom.yw.oop0808;importjavax.sound.sampled.*;importjava.io.File;importjava.io.IOException;/** * author YAN * date 2026/8/9 14:31 * description 加载音频文件 */publicclassPlayer{//加载音频文件publicvoidplay(Stringpath){//创建文件对象FilefilenewFile(path);Clipclipnull;try{AudioInputStreaminputStreamAudioSystem.getAudioInputStream(file);clipAudioSystem.getClip();clip.open(inputStream);//开始clip.start();//设置音量大小//音量取值范围 -80 ~ 6FloatControlcontrol(FloatControl)clip.getControl(FloatControl.Type.MASTER_GAIN);floatmaxcontrol.getMaximum();floatmincontrol.getMinimum();System.out.println(max max min min);floatvaluecontrol.getValue();Thread.sleep(3000);control.setValue(value-5);}catch(Exceptione){thrownewRuntimeException(e);}}//暂停//继续//设置音量publicstaticvoidmain(String[]args){}}TopFile类packagecom.yw.oop0808;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;/** * author YAN * date 2026/8/9 16:49 * description 文件字节流 */publicclassTopFile{//写入数据publicstaticvoidwriteData(Filefile){//创建文字字节流读写数据以字节为单位try{FileOutputStreamfosnewFileOutputStream(file);intscore1000;//写入数据fos.write(score);fos.write(score8);fos.write(score16);fos.write(score24);//强制写入fos.flush();System.out.println(写入成功);}catch(Exceptione){thrownewRuntimeException(e);}}//读取数据publicstaticvoidreadData(Filefile){//输入流try{FileInputStreamfisnewFileInputStream(file);intscorereadInt(fis);System.out.println(score:score);}catch(Exceptione){thrownewRuntimeException(e);}}publicstaticintreadInt(FileInputStreamfis)throwsException{inti1fis.read();inti2fis.read();inti3fis.read();inti4fis.read();returni424|i316|i28|i10;}publicstaticvoidmain(String[]args){StringpathE:\\IdeaProjects\\GameThread\\src\\com\\yw\\oop0808\\top.txt;FilefilenewFile(path);TopFile.writeData(file);TopFile.readData(file);}}
返回列表