韩顺平0基础学java——第31天

p612-637

IO流

IO流原理及流的分类
Java lO流原理
1.I/O是Input/Output的缩弓,IV/O技术是非常实用的技术,用于处理数据传输。
如读/写文件,网络通讯等。
2. Java程序中,对于数据的输入/输出操作以”流(stream)”的方式进行。

3. java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过方
法输入或输出数据

字节流:二进制文件

字符流:文本文件

Java的IO流共涉及40多个类,心儿都碎了

字节流

lnputStream:字节输入流

lnputStream抽象类是所有类字节输入流的超类lnputStream常用的子类
1.FilelnputStream:文件输入流
2.BufferedInputStream:缓冲字节输入流

3.ObjectInputStream:对象字节输入流

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Day31 {
    public static void main(String[] args) {
        new Day31().read1();
    }
    FileInputStream fileInputStream = null;

    public void read1(){
        String filePath = "e:\\JAVA\\Ioliu\\day31.txt";
        int readData = 0;
        try {
            fileInputStream = new FileInputStream(filePath);

           while((readData = fileInputStream.read())!=-1){
               //这里汉字乱码了。它按照一个一个字节读取的,而UTF-的格式汉字是3个字节
这里推荐用字符流。目前这种是一个一个字节读,效率比较低。
               System.out.println((char)readData);
           }
        }  catch (IOException e) {
            e.printStackTrace();
        }finally {
            //一定要关闭流,不然浪费资源。
            System.out.println("结束");
            try {
                fileInputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 OutputStream:字节输出流

public void writeFile(){
    //创建输出流

    String filePath = "D:\\madake\\mdk1.txt";
    FileOutputStream fileOutputStream = null;

    try {
        fileOutputStream = new FileOutputStream(filePath, true);//如果不写这个true就会覆盖

        //写入一个字节
       // fileOutputStream.write('m');

        //写入字符串
        String str = "aaaahello!";
       // fileOutputStream.write(str.getBytes());//方法1

        fileOutputStream.write(str.getBytes(),0,str.length());//方法2:0是起始位置,后面的长度是你要写入的长度




    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        try {
            fileOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

文件拷贝

边读编写,使用循环。

buf等使用。


字符流

FileReader和 FileWriter是字符流,即按照字符来操作io


FileReader相关方法:

1) new FileReader(File/String)
2) read:每次读取单个字符,返回该字符,如果到文件末尾返回-1

3) read(char):批量读取多个字符到数组,返回读取到的字符数,如果读到文件末尾返回-1

相关APl:
1) new String(char门:将char[]转换成String
2) new String(char[.off,len):将char[的指定部分转换成String

FileWriter常用方法

FileWriter常用方法
1) new FileWriter(File/String):覆盖模式,相当于流的指针在首端
2) new FileWriter(File/String,true):追加模式,相当于流的指针在尾端.

3) write(int):写入单个字符
4) write(char[]):写入指定数组
5) write(char[].off,len):写入指定数组的指定部分

6) write (string):写入整个字符串
7)write(string.off,len):写入字符串的指定部分
相关APl: String类:toCharArray:将String转换成char[注意:
FileWriter使用后,必须要关闭(close)或刷新(flush),否则写入不到指定的文件!

节点流和处理流

节点流和处理流的区别和联系


1.节点流是底层流/低级流,直接跟数据源相接。
2.处理流包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出。
3.处理流(也叫包装流)对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连[模拟修饰器设计模式]
处理流的功能主要体现在以下两个方面:
1.性能的提高:主要以增加缓冲的方式来提高输入输出的效率。
2操作的便捷:处理流可能提供了一系列便捷的方法来一次输入输出大批量的数据,使用更加灵活方便

对象流


●对象流-ObjectlnputStream和ObjectOutputStream
>看一个需求
1.将int num = 100这个int数据保存到文件中,注意不是100数字,而是int 100,并且,能够从文件中直接限复int 100
2将Dog dog = new Dog(“小黄”,3)这个dog对象保存到文件中,并且能够从文件恢复.·

3.上面的要求,就是能够将基本数据类型或者对象进行序列化和反序列化操作
>序列化和反序列化
1.序列化就是在保存数据时,保存数据的值和数据类型

2反序列化就是在恢复数据时,恢复数据的值和数据类型,注:反序列化的顺序需要和序列化的顺序一致。
3.需要让某个对象支持序列化机制,则必须让其类是可序列化的,为了让某个类是可序列化的,
必须实现如下两个接口之一:
>Serializable 这是一个标记接口,里面没有任何方法

>Externalizable 里面有方法需要实现,一般推荐上面的

不同包下的类导入、修改序列化的类问题:0630_韩顺平Java_ObjectInputStream_哔哩哔哩_bilibili

一些处理流

节点流和处理流
>注意事项和细节说明
1)读写顺序要一致
2)要求实现序列化或反序列化对象,需要实现 Serializable
3)序列化的类中建议添加SerialVersionUID,为了提高版本的兼容性:当你修改这个类的时候,只会觉得是版本的修改,而不是全新的类。
4)序列化对象时,默认将里面所有属性都进行序列化,但除了static或transient修饰的成员

5)序列化对象时,要求里面属性的类型也需要实现序列化接口
6)序列化具备可继承性,也就是如果某类已经实现了序列化,则它的所有子类也已经默认实现了序列化

 

打印流:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/743860.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

系统漏洞复现与勒索病毒

知识点:SMB漏洞介绍、漏洞复现流程、勒索病毒攻击与防护 渗透测试相关: 基本概念: 渗透测试就是利用我们所掌握的渗透知识,对网站进行一步一步的渗透,发现其中存在的漏洞和隐藏的风险,然后撰写一篇测试报…

Word如何在页眉中插入和删除横线

你平常是否遇见到Word的页眉中有一条横线,怎么也删不了!!! 今天刘小生分享如何在页眉中插入和删除横线,我们一起操练起来吧! 1、Word页眉插入横线 选择【插入】-【页眉页脚】,在“页眉页脚”…

基于SSM+VUE的网上订餐系统(带1w+文档)

基于SSMVUE的网上订餐系统(带1w文档) 网上订餐系统的数据库里面存储的各种动态信息,也为上层管理人员作出重大决策提供了大量的事实依据。总之,网上订餐系统是一款可以真正提升管理者的办公效率的软件系统。 项目简介 基于SSMVUE的网上订餐系统(带1w文档…

【LLM之KG】KoPA论文阅读笔记

研究背景 知识图谱补全(KGC)是通过预测知识图谱中缺失的三元组来完善知识图谱的信息。传统方法主要基于嵌入和预训练语言模型,但这些方法往往忽视了知识图谱的结构信息,导致预测效果不佳。 研究目标 本文的研究目标是探索如何将…

YOLOv8关键点pose训练自己的数据集

这里写自定义目录标题 YOLOv8关键点pose训练自己的数据集一、项目代码下载二、制作自己的关键点pose数据集2.1 标注(非常重要)2.1.1 标注软件2.1.2 标注注意事项a.多类别检测框b.单类别检测框2.2 格式转换(非常重要)2.3 数据集划分三、YOLOv8-pose训练关键点数据集3.1 训练…

小程序注册

【 一 】小程序注册 微信公众平台 https://mp.weixin.qq.com/ https://mp.weixin.qq.com/注册 邮箱激活 小程序账户注册 微信小程序配置 微信小程序开发流程 添加项目成员 【 二 】云服务 lass 基础设施服务(组装机) 你买了一大堆的电脑配件&#x…

Live Wallpaper Themes 4K Pro for Mac v19.9 超高清4K动态壁纸

Live Wallpaper & Themes 4K Pro for Mac v19.7 是一款专为Mac用户设计的超高清4K动态壁纸应用程序。它凭借出色的视觉效果和丰富的个性化设置,为用户带来全新的桌面体验。 这款软件提供了大量精美的动态壁纸供用户选择,涵盖了各种风格和主题&#…

STM32学习-HAL库 串口通信

学完标准库之后,本来想学习freertos的,但是看了很多教程都是移植的HAL库程序,这里再学习一些HAL库的内容,有了基础这里直接学习主要的外设。 HAL库对于串口主要有两个结构体UART_InitTypeDef和UART_HandleTypeDef,前者…

Java三层框架的解析

引言:欢迎各位点击收看本篇博客,在历经很多的艰辛,我也是成功由小白浅浅进入了入门行列,也是收货到很多的知识,每次看黑马的JavaWeb课程视频,才使一个小菜鸡见识到了Java前后端是如何进行交互访问的&#x…

亚马逊云科技官方活动:一个月拿下助理架构师SAA+云从业者考试认证(送半价折扣券)

为了帮助大家考取AWS SAA和AWS云从业者认证,小李哥争取到了大量考试半价50%折扣券,使用折扣券考试最多可省75刀(545元人民币)。 领取折扣券需要加入云师兄必过班群,在群中免费领取。目前必过班群招募到了超过200名小伙伴,名额有限…

杂记 | 搭建反向代理防止OpenAI API被封禁(对于此次收到邮件提示7月9日后将被屏蔽的解决参考)

文章目录 重要声明(免责)01 OpenAI封禁API的情况02 解决方案及原理2.1 原因分析2.2 解决方案2.3 步骤概述 03 操作步骤3.1 购买一个海外服务器3.2 申请一个域名3.3 将域名指向代理服务器3.4 在代理服务器上安装nginx3.5 配置反向代理 重要声明&#xff0…

如何利用小猪APP分发进行高效的APP封装打包

你有没有想过,为什么有些应用程序似乎在一夜之间就上线了,而你的应用却还在封装打包的过程中挣扎?别担心,这里有一个秘密武器,它叫做小猪APP分发。 小猪app封装www.ppzhu.net 什么是APP封装打包? APP封装…

从零开始做题:修猫

修猫 1 题目 2 解题 2.1 使用Stegslove分析图片 (base) ┌──(holyeyes㉿kali2023)-[~/Misc/tool-misc] └─$ java -jar Stegsolve.jar 2.2 analyse -frame browser 2.3 得到flag DASCTF{818ca3a840e768da7d5fcdeaedd5012f}

解决GPU 显存未能完全释放

一、 现象 算法同学反馈显存未能完全释放。 二、解决方法 一条命令搞定 注意:执行时注意不要误杀其他的python进程,需要确认好。 我的这条命令是将所有python进程都杀死了 ps -elf | grep python | awk {print $4} | xargs kill -s 9

Redis源码学习:SDS设计与内存管理

为什么Redis选择SDS 1、缓解C语言字符串的缺陷 在 C 语言中可以使用 char* 字符数组来实现字符串。每个字符串分配一段连续的内存空间,依次存放字符串中的每一个字符,最后以null字符结尾。这种设计存在以下问题: 1、低效的操作 每次获取字…

【containerd】Containerd高阶命令行工具nerdctl

前言 对于习惯了使用docker cli的用户来说,containerd的命令行工具ctr使用起来不是很顺手,此时别慌,还有另外一个命令行工具项目nerdctl可供我们选择。 nerdctl是一个与docker cli风格兼容的containerd的cli工具。 nerdctl已经作为子项目加入…

数据分析必备:一步步教你如何用matplotlib做数据可视化(12)

1、Matplotlib 3D线框图 线框图采用值网格并将其投影到指定的三维表面上,并且可以使得到的三维形式非常容易可视化。plot_wireframe()函数用于此目的 import matplotlib.pyplot as plt import numpy as np import math import seaborn as sns plt.rcParams[font.s…

新增题目接口开发

文章目录 1.基本设计2.生成CRUD代码1.生成五张表的代码1.subject_info2.subject_brief3.subject_judge4.subject_multiple5.subject_radio 2.将所有的dao放到mapper文件夹3.将所有实体类使用lombok简化4.删除所有mapper的Param("pageable") Pageable pageable5.删除所…

nacos 整合 openfeign实现远程调用

结合之前写过的案例 Springcloud Alibaba nacos简单使用 Springcloud 之 eureka注册中心加feign调用 在微服务架构中,服务注册与发现是一个关键组件。Nacos 是一个开源的服务注册与发现、配置管理平台,而 OpenFeign 是一个声明式的 Web 服务客户端&am…