黑马程序员_88_IO中的其他类

【每日一记项目】IO大作业 黑马程序员Java零基础视频教程_下部(Java入门,含斯坦福大学练习题+力扣算法题和大厂java面试题)视频 https://www.bilibili.com/video/BV1yW4y1Y7Ms 其中的最后IO作业没有答案,这里给出参考答案。 阅读详情

 ——- android培训、java培训、期待与您交流! ———-

对象序列化

ObjectInputStream与ObjectOutputStream
被操作的对象需要实现Serializable。

类通过实现java.io.Serializable接口以启用序列化功能,Serializable只是一个标记接口。

示例

import java.io.Serializable;

class Person implements Serializable{
       private String name;
       private int age;

       public Person(String name,int age){
             this.name = name;
             this.age = age;
      }

       public String getName(){
             return name;
      }

       public void setName(String name){
             this.name = name;
      }

       public int getAge(){
             return age;
      }

       public void setAge(int age){
             this.age = age;
      }
}

运行结果图
这里写图片描述
创建了obj.object文件

示例2

读取obj.object文件

import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class ObjectStreamDemo{
       public static void main(String[] args) throws Exception {
            readObj();
      }

       public static void readObj() throws Exception {
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.object" ));

            Person p = (Person)ois.readObject();

            System.out.println(p.getName() + ":" + p.getAge());

            ois.close();
      }
}

运行结果图
这里写图片描述

示例3

writeObject方法不能写入类及其所有超类型的瞬态和静态字段的值。

 import java.io.Serializable;

class Person implements Serializable{
       private static final long serialVersionUID = 9527;

       private transient String name;
       private static int age;

       public Person(String name,int age){
             this.name = name;
             this.age = age;
      }

       public String getName(){
             return name;
      }

       public void setName(String name){
             this.name = name;
      }

       public int getAge(){
             return age;
      }

       public void setAge(int age){
             this.age = age;
      }
}

运行结果图
这里写图片描述

RandomAccessFile

随机访问文件,自身具备读写的方法。
通过skipBytes(int x),seek(int x)等方法来达到随机访问。

特点:
1. 该对象即能读,又能写。
2. 该对象内部维护了一个byte数组,并通过指针可以操作数组中的元素。
3. 可以通过getFilePointer方法获取指针的位置,和通过seek方法设置指针的位置。
4. 其实该对象就是将字节输入流和输出流进行了封装。
5. 该对象的源或者目的只能是文件。通过构造函数就可以看出。

RandomAccessFile不是io体系中的子类。

示例

import java.io.IOException;
import java.io.RandomAccessFile;

public class RandomAccessFileDemo{
       public static void main(String[] args) throws IOException {
            writeFile();
      }

       //使用RandomAccessFile对象写入一些人员信息,比如姓名和年龄
       public static void writeFile() throws IOException {
             //如果文件不存在,则创建,如果文件存在,不创建
            RandomAccessFile raf = new RandomAccessFile("ranacc.txt" ,"rw" );

            raf.write( "张三".getBytes());
             //使用write方法之写入最后一个字节
            raf.write(97);
             //使用writeInt方法写入四个字节(int类型)
            raf.writeInt(97);

            raf.write( "小强".getBytes());
            raf.writeInt(99);

            raf.close();
      }
}

运行结果图
这里写图片描述

示例2

打印在控制台

import java.io.IOException;
import java.io.RandomAccessFile;

public class RandomAccessFileDemo{
       public static void main(String[] args) throws IOException {
            readFile();
      }

       public static void readFile() throws IOException {
            RandomAccessFile raf = new RandomAccessFile("ranacc.txt" ,"r" );

             //通过seek设置指针的位置
            raf.seek(9); //随机的读取,只要指定指针的位置即可

             byte[] buf = new byte[4];           
            raf.read(buf);

            String name = new String(buf);
            System.out.println( "name=" + name);

             int age = raf.readInt();
            System.out.println( "age=" + age);

            System.out.println( "pos:" + raf.getFilePointer());

            raf.close();
      }
}

运行结果图
这里写图片描述

示例3

往指定位置写数据

import java.io.IOException;
import java.io.RandomAccessFile;

public class RandomAccessFileDemo{
       public static void main(String[] args) throws IOException {
            randomWrite();
      }

       public static void randomWrite() throws IOException {
            RandomAccessFile raf = new RandomAccessFile("ranacc.txt" ,"rw" );

             //往指定位置写入数据
            raf.seek(3*8);

            raf.write( "哈哈".getBytes());
            raf.writeInt(102);

            raf.close();
      }
}

运行结果图
这里写图片描述

管道流

PipedInputStream和PipedOutputStream:输入输出可以直接进行连接,通过结合线程使用。

示例

import java.io.PipedInputStream;
import java.io.PipedOutputStream;

public class PipedStream{
       public static void main(String[] args) throws Exception {
            PipedInputStream input = new PipedInputStream();
            PipedOutputStream output = new PipedOutputStream();

            input.connect(output);

             new Thread(new Input(input)).start();
             new Thread(new Output(output)).start();
      }
}

class Input implements Runnable{
       private PipedInputStream in;

      Input(PipedInputStream in){
             this.in = in;
      }

       public void run(){
             try{
                   byte[] buf = new byte[1024];
                   int len = in.read(buf);

                  String s = new String(buf,0,len);
                  System.out.println( "s=" + s);
                  in.close();
            } catch(Exception e){
                  e.printStackTrace();
            }
      }
}

class Output implements Runnable{
       private PipedOutputStream out;

      Output(PipedOutputStream out){
             this.out = out;
      }

       public void run(){
             try{
                  out.write( "hi,管道来了!" .getBytes());
                  out.close();
            } catch(Exception e){
                  e.printStackTrace();
            }
      }
}

运行结果图
这里写图片描述

操作基本数据类型

DataInputStream与DataOutputStream

示例

示例1

import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class DataStreamDemo{
       public static void main(String[] args) throws IOException {
            writeData();
      }

       public static void writeData() throws IOException {
            DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.txt" ));

            dos.writeUTF( "您好");

            dos.close();
      }
}

运行结果图
这里写图片描述

示例2

import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class DataStreamDemo{
       public static void main(String[] args) throws IOException {
            readData();
      }

       public static void readData() throws IOException {
            DataInputStream dis = new DataInputStream(new FileInputStream("data.txt" ));

            String str = dis.readUTF();

            System.out.println(str);

            dis.close();
      }
}

运行结果图
这里写图片描述

操作字节数组

ByteArrayInputStream与ByteArrayOutputStream
 关闭字节数组输出输出流无效,因为它们没有调用底层资源,所有的操作都是在内存中完成的。

示例

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class ByteArrayStreamDemo{
       public static void main(String[] args) throws IOException {
            ByteArrayInputStream bis = new ByteArrayInputStream("abcdef" .getBytes());
            ByteArrayOutputStream bos = new ByteArrayOutputStream();

             int ch = 0;

             while((ch = bis.read()) != -1){
                  bos.write(ch);
            }

            System.out.println(bos.toString());
      }
}

运行结果图
这里写图片描述

编码表

编码表的由来
计算机只能识别二进制数据,早期由来是电信号。为了方便应用计算机,让它可以识别各个国家的文字。
就将各个国家的文字用数字来表示,并一一对应,形成一张表,这就是编码表。

常见的编码表
ASCII:美国标准信息交换码,用一个字节的7位可以表示。
ISO8859-1:拉丁码表。欧洲码表,用一个字节的8位表示。
GB2312:中国的中文编码表。
GBK:中国的中文编码表升级,融合了更多的中文文字符号。
Unicode:国际标准码,融合了多种文字。
所有文字都用两个字节来表示,Java语言使用的就是unicode
UTF-8:最多用三个字节来表示一个字符。

##示例

  import java.io.IOException;

public class EncodeDemo{
       public static void main(String[] args) throws IOException{
             //字符串-->字节数组:编码
             //字符数组-->字符串:解码
            String str = "您好";

             //编码
             byte[] buf1 = str.getBytes("GBK" );
            printBytes(buf1);

             byte[] buf2 = str.getBytes("UTF-8" );
            printBytes(buf2);

             //解码
            String s1 = new String(buf1);
            System.out.println( "s1 = " + s1);

            String s2 = new String(buf2,"UTF-8" );
            System.out.println( "s2 = " + s2);
      }

       private static void printBytes(byte[] buf){
             for(byte b : buf){
                  System.out.print(b + " ");
            }
            System.out.println();
      }
}

运行结果图
这里写图片描述

从ResNet到EfficientNet:特征金字塔网络(FPN)在不同骨干网中的适配指南 本文深入探讨了特征金字塔网络(FPN)与ResNet、VGG、EfficientNet等主流骨干网络的适配策略。文章详细解析了FPN的核心原理,并针对不同骨干网络的特征提取特性,提供了通道对齐、参数量估算及迁移学习的系统化指南,旨在帮助开发者在目标检测等视觉任务中构建高性能、高效率的模型。 阅读详情

相关推荐

AI驱动的数据完整性:ECC到S/4HANA迁移

在SAP ECC到S/4HANA的迁移过程中,数据完整性验证是最复杂且关键的挑战之一。本文介绍了一个全面的AI驱动的端到端数据完整性框架,用于对账事务数据并验证数百万条主数据记录和事务记录的完整性。该框架结合了模式映射、自然语言提示到SQL生成、基于LLM的解决方案、大规模数据对账的数据完整性工具、基于云的测试数据管理以及实时Power BI仪表板,为开发者提供了一个可重复、可扩展的工作流程,确保ERP迁移过程中的数据质量。

简简单单Onlinezuozuo 1172

IO流(黑马程序员学习笔记)

字节缓冲流在源代码中内置了字节数组,可以提高读写效率。效率高(推荐,代码简单),流每次拿指定数组大小的字节,再写入目的源。效率高,每次从数据源拿8192个字节,再放到内存中,每次从内置数组(调用出来的数组)中拿每次拿指定数组大小的字节,写到输出数组中,写满8192个字节后,输出。/*D:\00-课程介绍.mp4 146MB拷贝的效率测试:1. 普通流单个字节拷贝 361719毫秒2. 普通流 + 自定义数组拷贝 146毫秒3. 缓冲流单个字节拷贝 2055毫秒。

A2294249395的博客 890

IIC协议常见误区解析:从时序图到实际波形(附逻辑分析仪实测)

本文深入解析IIC协议在实际应用中的常见误区,从理想时序图到逻辑分析仪实测波形的差异,揭示通信故障的根本原因。通过硬件设计优化、软件时序调优和高级调试技巧,帮助开发者有效规避IIC通信中的隐形陷阱,提升系统稳定性。

weixin_28738397的博客 370

黑马程序员 File类、Properties类、IO包中的其他类

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

487

Opencv2.4.9源码分析——HoughCircles

图形可以用一些参数进行表示,标准霍夫变换的原理就是把图像空间转换成参数空间(即霍夫空间),例如霍夫变换的直线检测就是在距离-角度空间内进行检测。圆可以表示成: (x-a)2+(y-b)2=r2                   (1) 其中a和b表示圆心坐标,r表示圆半径,因此霍夫变换的圆检测就是在这三个参数组成的三维空间内进行检测。 原则上,霍夫变换可以检测任何形状。但复杂的形状需要的

赵春江的专栏 3万+

Win11任务栏图标消失?快速恢复指南

任务栏图标消失是Windows 11操作系统中常见的问题之一,但通过上述方法,用户通常可以轻松解决这一问题。无论是重启Windows资源管理器、使用命令提示符修复、检查系统更新和设置,还是考虑重装系统,都可以帮助用户恢复任务栏图标的正常显示。希望本文的介绍能对用户有所帮助,让Windows 11的使用更加顺畅和愉快。

mmoo_python的博客 5409

黑马程序员——IO流与File类

------- android培训、java培训、期待与您交流! ---------- 一、字符流与字节流 IO流用来处理设备之间的数据传输。Java对数据的操作是通过流的方式。Java用于操作流的对象都在IO包中。 输入流和输出流相对于内存设备而言。 将外设中的数据读取到内存中:输入。 将内存的数写入到外设中:输出。 流按操作数据分为两种:字节流与字符流。 字符流的由来

qq_28592367的博客 483

AT32F421玩转AM32电调:手把手教你调试过零点比较器,告别电机抖动

本文详细介绍了如何使用AT32F421芯片调试AM32电调的过零点比较器,解决电机抖动问题。通过硬件配置、软件环境搭建、比较器电路原理分析及filter_level参数动态调整等实战步骤,帮助开发者精准诊断和优化电机控制性能。

weixin_42525632的博客 276

黑马程序员——IO流

——- android培训、java培训、期待与您交流! ———-黑马程序员IO流 IO流常用基类 字符流 字符流创建文件 字符流读取文件 字符流继承体系简图 字符流的缓冲区 装饰设计模式 字节流 字节流继承体系简图 字符流的缓冲区 转换流 IO流的操作规律总结 IO包中的其他类 IO流体系黑马程序员——IO流 IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流

jmw__的专栏 523

ABAP CURR Data Type 深度解析与实战案例

CURR 数据类型是 SAP ABAP 中为处理货币金额而设计的一种特殊数据类型。CURR 数据类型能够自动根据关联的货币代码字段(例如 WAERS)确定小数位数,从而保证金额数据的精度与正确性。CURR 类型通常在 SAP 数据字典中使用,常见于各类业务数据表中,如会计凭证、销售订单等场景中,用于存储货币金额。CURR 数据类型底层实现上类似于 DEC 数据类型,但其特别之处在于与货币代码字段的绑定,这使得金额的格式化和显示可以自动匹配相应的货币规则。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 877

[STC32G144K246入门第一步]点亮LED

STC32G144K246是一款高性能32位8051单片机,集成了丰富外设资源,适用于工业控制和复杂算法处理。该芯片支持双模式内核,内置硬件加速器,提供246KB Flash和144KB SRAM存储空间。文章详细介绍了开发环境搭建步骤、寄存器配置方法,并给出了LED驱动示例代码,通过推挽输出控制P42口实现闪烁效果。虽然开发环境相比ARM存在不足,但通过合理配置仍可满足项目需求。该教程为开发者快速上手STC32G144K246提供了实用参考。

sinat_58149788的博客 795

黑马程序员总结文档汇总

这篇日志,是这些日子以来观看传智播客视频写的一篇汇总文档,蓝色标识的超链接是doc类型的文档,绿色标识的超链接是思维导图类型的文档,同时两种类型的文档中每篇都提供了文档下载链接,详细内容如下:   黑马程序员 01 Java基础教学 - 01 - 认识Java                                黑马程序员 02 Java基础教学 - 02 - 走进Java

kongbeily的专栏 2143

深入介绍 SAP OData CSRF Token 的一些技术细节

跨站请求伪造(Cross-Site Request Forgery,简称 CSRF)是一种网络攻击手段,它允许攻击者伪造用户的身份来执行未经授权的操作。为了防止 CSRF 攻击,常用的一种技术手段就是 CSRF Token.CSRF Token 是一种随机生成的防伪 Token,它由服务器颁发给客户端,并需要客户端在提交某些特定类型的请求时,将该 Token 添加到 HTTP 请求的头部字段去。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 642

黑马程序员——java复习总结——其他类和IO流

------- android培训、java培训、期待与您交流! ---------- 一.其他对象   1.1      System类 System类中的方法和属性都是静态的。 典型的方法便是: Sytem.out:标准输出,它可以将输出语句打印在控制台上。 System.in:标准输入,它可以读取从键盘上输入的字符。   1.2      Runtime类

key_fans的博客 564

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

黑马程序员微服务黑马旅游网

​ 本文章教程来自于黑马程序员的微服务教程 的黑马旅游网项目。 前端技术栈 html5、css3、JavaScript、vue、element-ui、axios 后端技术栈 springboot、Elasticsearch、RabbitMQ、Docker、mybatis-plus等。 ​

程序猿追的博客 9937

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

黑马程序员_IO流_IO包中的其他类

------------------------------android培训、java培训、期待与您交流!----------------------------------------------------------------     IO包中的其他类 打印流 •PrintWriter与PrintStream • 可以直接操作输入流和文件。  序列流 •SequenceI

AtlasShrugged的专栏 268

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

黑马程序员 IO笔记

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------   IO: input output io流用来处理设备之间的数据传输 java通过对数据的操作是通过流的方式 java用于操作流的对象都在IO包中   字符流的操作(Reader和Writer的子类的操作)(在实例化一个文件时如果目

FengLu369的专栏 1000

黑马程序员 IO之File等类

-----------android培训、java培训、java学习型技术博客、期待与您交流! ----------- File类: 用来对文件或者文件夹封装对象,对其属性进行操作。 File对象可以作为参数传递给流的构造函数。 File f = new File("a.txt")可以将已有或者没有的文件或者文件夹封装成对象。 File f = new File("c:\\abc

501

黑马程序员——IO(一)--File类、RandomAccessFile类、节点流类

-------  android培训、java培训、期待与您交流! ----------

ruying_suixing的专栏 716

黑马程序员之IO

---------------------- android培训、java培训、期待与您交流! ---------------------- File类是IO包中唯一代表磁盘文件本身信息的类,而不是文件中的内容 File类定义了一些与平台无关的方法来操纵文件,例如:创建,删除文件和重命名文件 Java中的目录被当作一种特殊的文件使用,list方法可以返回目录中的所有子目录和文件名 在uni

zhangbangqing1988123的专栏 331

黑马程序员——IO流—整理笔记

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 今天刚学完IO流,下面整理一下我的学习笔记。         ①根据处理数据的数据类型的不同可以分为:字节流(抽象基类为InPutStream和OutPutStream)和字符流(抽象基类为Reader和Writer)。          注意:由这四个类派生出来的子类名称都是以其父类名作

nanfp的博客 926

黑马程序员——Java基础之IO流

IO流   一、概述: IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 Java用于操作流的对象都在IO包里 流按操作数据分为两种:字节流和字符流;[编码表的存在][汉字与1010之间的对应的表GBK] 流按流向分为:输入流,输出流。 Unicode码表,都是两个字节。优化——>Unicode-8,需要几个字节就给几个字节。 问题:如你好在不同的编码

zdh_61的专栏 953

黑马程序员英语单词册

黑马程序员英语单词册经过几天的整理黑马程序员将必备的 600 词汇,和有关计算机需要掌握的词汇整理出来,分享给大家学习,希望对你有所帮助。

程序员猫爪 2408

黑马程序员————java IO系统

流的概念 大部分程序都需要输入/输出处理,比如从键盘读取数据、向屏幕中输出数据、从文件中读或者向文件中写数据、在一个网络连接上进行读写操作等。在Java中,把这些不同类型的输入、输出源抽象为流(Stream),而其中输入或输出的数据则称为数据流(Data Stream),用统一的接口来表示,从而使程序设计简单明了。 流一般分为输入流(InputStream)和输出流(OutputStream)

baochanghong的专栏 913

黑马程序员--IO流中的File类

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、IO流的小知识 1、Java中有几种类型的流       字节流和字符流。字节流继承于InputStream和OutputStream,字符流继承于InputStreamReader 和OutputStreamWriter。 2、字节流如何转为字符流       字节输入流转字

ErYouList的博客 835
上一篇: 黑马程序员_87_Properties集合
下一篇: 黑马程序员_89_GUI图形化界面
回到未来2020
博客等级 码龄12年 27粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值