10.1-全栈Java笔记:最全面的IO技术(一)
来源:互联网 发布:比邻软件 编辑:程序博客网 时间:2024/06/07 06:03
IO技术
对于任何程序设计语言而言,输入输出(Input/Output)系统都是非常核心的功能。程序运行需要数据,数据的获取往往需要跟外部系统进行通信,外部系统可能是文件、数据库、其他程序、网络、IO设备等等。
外部系统比较复杂多变,那么我们有必要通过某种手段进行抽象、屏蔽外部的差异,从而实现更加便捷的编程。
输入(Input)指的是:可以让程序从外部系统获得数据(核心含义是“读”,读取外部数据)。常见的应用:
1) 读取硬盘上的文件内容到程序。例如:播放器打开一个视频文件、word打开一个doc文件。
2) 读取网络上某个位置内容到程序。例如:浏览器中输入网址后,打开该网址对应的网页内容;下载网络上某个网址的文件。
3) 读取数据库系统的数据到程序。
4) 读取某些硬件系统数据到程序。例如:车载电脑读取雷达扫描信息到程序;温控系统
输出(Output)指的是:程序输出数据给外部系统从而可以操作外部系统(核心含义是“写”,将数据写出到外部系统)。常见的应用有:
5) 将数据写到硬盘中。 例如:我们编辑完一个word文档后,将内容写到硬盘上进行保存。
6) 将数据写到数据库系统中。例如:我们注册一个网站会员,实际就是后台程序向数据库中写入一条记录。
7)将数据写到某些硬件系统中。例如:导弹系统导航程序将新的路径输出到飞控子系统,飞控子系统根据数据修正飞行路径。
java.io包为我们提供了相关的API,实现了对所有外部系统的输入输出操作,这就是我们这章所要学习的技术。
基本概念和IO入门
数据源
数据源data source,提供数据的原始媒介。
常见的:数据库、文件、其他程序、内存、网络连接、IO设备。
数据源分为:源设备、目标设备。
源设备:为程序提供数据,一般对应输入流。
目标设备:程序数据的目的地,一般对应输出流。
流的概念
数据源就像水箱,流(stream)就像水管中流着的水流,程序就是我们最终的用户。 流是一个抽象、动态的概念,是一连串连续动态的数据集合。
图1 流与源数据源和目标数据源之间的关系
第一个简单的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
- 10.1-全栈Java笔记:最全面的IO技术(一)
- 10.2-全栈Java笔记:最全面的IO技术(二)
- java中的IO最全面整理
- 最全的java面试题目一
- Java学习笔记(54)----------详解Java IO(全面)
- java笔记(一)Io
- JAVA IO流最详解(一)
- 11.1-全栈Java笔记:多线程技术的基本概念
- java中的IO最全整理
- 12.3-全栈Java笔记:Java网络编程(一)
- 最全面的贝叶斯过滤技术
- 最全面的Android热修复技术
- 最全面的Android热修复技术
- 最全的IO操作知识总结
- 最全面的RecyclerView源码解析(一)
- java io学习笔记(一)
- Java IO 学习笔记(一)
- JAVA IO系统 (笔记一)
- ssm框架之jquery和AJAX验证
- Unity 开发总结之VLC Player for Unity插件的使用
- div布局思考
- Bellman-Ford 算法
- 剑指offer题四
- 10.1-全栈Java笔记:最全面的IO技术(一)
- Apparmor——Linux内核中的强制访问控制系统
- 安卓自定义View进阶-Path之基本操作
- AD10长方形通孔焊盘的画法
- ORcaleClient11 + PL/SQL 安装连接Orcale数据库
- 自学编程需要注意什么?
- 添加QDialog的Layout布局属性操作
- 第三方新浪微博登录接口的申请及使用流程之web+php
- AWK小结