10.1-全栈java笔记:最全面的io技术

     2022-03-19     701

关键词:

IO技术

对于任何程序设计语言而言,输入输出(Input/Output)系统都是非常核心的功能。程序运行需要数据,数据的获取往往需要跟外部系统进行通信,外部系统可能是文件、数据库、其他程序、网络、IO设备等等。

外部系统比较复杂多变,那么我们有必要通过某种手段进行抽象、屏蔽外部的差异,从而实现更加便捷的编程。

输入(Input)指的是:可以让程序从外部系统获得数据(核心含义是“读”,读取外部数据)。常见的应用:

1) 读取硬盘上的文件内容到程序。例如:播放器打开一个视频文件、word打开一个doc文件。

2) 读取网络上某个位置内容到程序。例如:浏览器中输入网址后,打开该网址对应的网页内容;下载网络上某个网址的文件。

3) 读取数据库系统的数据到程序。

4) 读取某些硬件系统数据到程序。例如:车载电脑读取雷达扫描信息到程序;温控系统

输出(Output)指的是:程序输出数据给外部系统从而可以操作外部系统(核心含义是“写”,将数据写出到外部系统)。常见的应用有:

5) 将数据写到硬盘中。 例如:我们编辑完一个word文档后,将内容写到硬盘上进行保存。

6) 将数据写到数据库系统中。例如:我们注册一个网站会员,实际就是后台程序向数据库中写入一条记录。

7)将数据写到某些硬件系统中。例如:导弹系统导航程序将新的路径输出到飞控子系统,飞控子系统根据数据修正飞行路径。

 

java.io包为我们提供了相关的API,实现了对所有外部系统的输入输出操作,这就是我们这章所要学习的技术。

基本概念和IO入门

数据源

数据源data source,提供数据的原始媒介。

常见的:数据库、文件、其他程序、内存、网络连接、IO设备。

数据源分为:源设备、目标设备。

源设备:为程序提供数据,一般对应输入流。

目标设备:程序数据的目的地,一般对应输出流。

流的概念

数据源就像水箱,流(stream)就像水管中流着的水流,程序就是我们最终的用户。 流是一个抽象、动态的概念,是一连串连续动态的数据集合。

流与源数据源和目标数据源之间的关系

 第一个简单的IO流程序及深入

当程序需要读取数据源的数据时,就会通过IO流对象开启一个通向数据源的流,通过这个IO流对象相关方法可以顺序读取流中的数据。

【示例1 通过流对象从一个文件中读取数据(只用于测试,不规范的写法)

import java.io.*;

 

public class Demo01 {

    public static void main(String[] args) {

        try {

             FileInputStream  fis = new    FileInputStream("d:/a.txt");  //文件内容是:abc

             int s1 = fis.read();    //打印输入字符a对应的ascii码值97

             int s2 = fis.read();     //打印输入字符a对应的ascii码值98

             int s3 = fis.read();     //打印输入字符a对应的ascii码值99

             int s4 = fis.read();     //由于文件内容已经读取完毕,返回-1

             System.out.println(s1);

             System.out.println(s2);

             System.out.println(s3);

             System.out.println(s4);

 

             fis.close();            

        //流对象使用完,必须关闭!不然,总占用系统资源,最终会造成系统崩溃!

        } catch (Exception e) {

             e.printStackTrace();

        }

    }

}

【示例2】通过流对象从一个文件中读取数据(经典代码,一定要掌握)

import java.io.*;

 

public class Demo02 {

    public static void main(String[] args) {

        FileInputStream  fis =null;

        try {

             fis = new    FileInputStream("d:/a.txt");  //内容是:abc

             StringBuilder sb = new StringBuilder();

             int temp = 0;

             while((temp=fis.read())!=-1){

                 sb.append((char)temp);

             }

             System.out.println(sb); 

        } catch (Exception e) {

             e.printStackTrace();

        }finally{

             try{

                 if(fis!=null){

                     fis.close();

//流对象,使用完后必须关闭!!这种写法,保证了即使遇到异常情况,也会关闭流对象。

                  }  

             }catch(IOException e){

                 e.printStackTrace();

             }

        }

    }

}

老鸟建议:

    如上代码是一段非常典型的IO流代码,其他流对象的使用也基本是同样的模式!

本节我们先讲到这里,下节我们继续聊~~





「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。


 笔记包含从浅入深的六大部分:

  A-Java入门阶段

  B-数据库从入门到精通

  C-手刃移动前端和Web前端

  D-J2EE从了解到实战

  E-Java高级框架精解

  F-Linux和Hadoop 




本文出自 “12931675” 博客,请务必保留此出处http://12941675.blog.51cto.com/12931675/1943928

最全面的springboot教程——整合框架(代码片段)

...介绍~📌博主主页:小新要变强的主页👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~👉算法刷题路线可参考:... 查看详情

最全面的springmvc教程——跨域问题(代码片段)

...介绍~📌博主主页:小新要变强的主页👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~👉算法刷题路线可参考:... 查看详情

最全面的springboot教程——数据库连接(代码片段)

...介绍~📌博主主页:小新要变强的主页👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~👉算法刷题路线可参考:... 查看详情

最全面的springboot教程——数据库连接(代码片段)

...介绍~📌博主主页:小新要变强的主页👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~👉算法刷题路线可参考:... 查看详情

最全面的springboot教程——springboot运行原理分析(代码片段)

...介绍~📌博主主页:小新要变强的主页👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~👉算法刷题路线可参考:... 查看详情

mybatisplus最全面的mybatisplus通关教程(代码片段)

...介绍~📌博主主页:小新要变强的主页👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~👉算法刷题路线可参考:... 查看详情

最全面的springboot教程——springboot概述(代码片段)

...介绍~📌博主主页:小新要变强的主页👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~👉算法刷题路线可参考:... 查看详情

最全面的springboot教程——springboot配置文件(代码片段)

...介绍~📌博主主页:小新要变强的主页👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~👉算法刷题路线可参考:... 查看详情

最新最全面的spring详解——spring-mybatis整合(代码片段)

...整合。📌博主主页:小新要变强的主页👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~👉算法刷题路线可参考:... 查看详情

11.1-全栈java笔记:多线程技术的基本概念

多线程是JAVA语言的重要特性,大量应用于网络编程、应用于服务器端程序的开发、以及最常见的UI界面底层原理、操作系统底层原理都大量使用了多线程。我们可以流畅的点击软件或者游戏中的各种按钮,其实,底层就是多线程... 查看详情

建议收藏!最全全栈工程师学习路径(基于java)

前言:笔者也是奋斗于全栈学习的学生之一,根据教学各大教学机构、大佬整理、经典教材和自己的实际体验总结出一个全栈工程师学习路径。需要注意的是,这个学习路径是基于Java的,也就是推荐第一语言为Jav... 查看详情

最新最全面的spring详解——事务管理(代码片段)

...介绍~📌博主主页:小新要变强的主页👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java 查看详情

13.1-全栈java笔记:打飞机游戏实战项目|awt技术|mygameframe

 简介和项目目标通过游戏项目学习整个Java基础知识体系,我们做了精心的设计,让每一章知识都能获得应用。比如:多线程用来实现动画效果、容器实现对于多发炮弹的存取和处理、常用类等等的应用。寓教于乐,让大家... 查看详情

10.9-全栈java笔记:装饰器模式构建io流体系

装饰器模式装饰器模式是GOF23种设计模式中较为常用的一种模式。它可以实现对原有类的包装和装饰,使新的类具有更强的功能。 我这里有智能手机Iphone, 我们可以通过加装投影组件,实现原有手机功能的扩展。这就是一... 查看详情

13.4-全栈java笔记:打飞机游戏实战项目|offscreenimage|gameobject|plane

双缓冲技术解决闪烁问题上节,我们实现了动画效果,但是发现窗口会不停的闪烁,体验度非常差。在实际开发中,绘制图形是非常复杂的,绘图可能需要几秒甚至更长时间,也经常发生闪烁现象,为了解决这个问题,我们通常... 查看详情

12.6-全栈java笔记:java网络编程

上节回顾:在学习了Socket建立客户端和服务器双向交流后,我们发现它的问答形式不够灵活。本节课我们讲解如何在服务器和客户端之间实现聊天室~需要思考的问题:服务器端:一个线程专门发送消息,一个线程专门接收消息... 查看详情

13.7-全栈java笔记:打飞机游戏实战项目|rectangle|intersects|plane

碰撞类检测技术游戏中,碰撞是遇到最频繁的技术。当然,很多游戏引擎内部已经做了碰撞检测处理,我们只需调用即可。本节课是从碰撞的原理进行讲解,大家自己去实现基本的碰撞检测。 矩形检测原理游戏中,多个元素... 查看详情

13.2-全栈java笔记:打飞机游戏实战项目|graphics|imageio|gameutil

上节我们讲到如何在游戏项目中运用AWT技术绘制游戏窗口,本节我们继续往下讲~~ 图形和文本绘制1)paint方法如果要在窗口中画图或者显示什么内容,我们需要重写paint(Graphicsg)方法。这个方法的作用是:画出整个窗口及其内... 查看详情