四月二十四号java基础知识
1.输入输出是指程序与外部设备或其他计算机进行交互的操作
2.流(stream)是指计算机各部件之间的数据流动
流的内容上划分:流分为字节流和字符流
3.输入流:将数据从外设或外存(如键盘、鼠标、文件等)传递到应用程序的流称为输入流(input
stream)
输出流:将数据从应用程序传递到外设或外存(如屏幕、打印机、文件等)的流称为输出流
(output stream)
也就是说接收数据时可以认为是读数据流,程序发送数据时可以认为是写数据流
4.采用数据流来处理输入输出的目的是使得程序的输入输出操作独立于相关设备
流式输入输出的特点是数据的获取和发送是沿着数据序列顺序进行
5.使用缓冲流(buffered stream)即为一个流配有一个缓冲区(buffer),这个缓冲区就是专门
用于传送数据的一块内存
缓冲流提高了内存与外部设备之间的数据传输效率
6.java.io包中有四个基本类:InputSteam、OutputStream、及Reader、Writer类
它们分别处理字节流和字符流
输入输出流包含字节流和字符流;
字节流:处理字节数据(基本类型为:InputSteam,OutputStream)
字符流:处理字符数据(基本类型:Reader、Writer)
7.InputSteam、OutputStream、及Reader、Writer类是抽象类,用于数据流的输入输出流
File是文件类,用于磁盘文件与文件夹的管理;
RandomAcessFile是随机访问文件类,用于实现对磁盘文件的随机读写操作
8.InputSteam,OutputStream流类通常用来处理“位流”(bit stream)即字节流,这种流通常
被用来读写诸如图片、音频、视频之类的二进制数据,也就是二进制文件,但也可以处理
文本文件;而Reader与Writer类则是用来处理“字符流”(character stream)也就是
文本文件
9.InputSteam、OutputStream、及Reader、Writer类是抽象类,所以一般而言,并不会使用
这些类,因此不能表明它们具体对应那种I/O设备。而通常是根据这些类所派生的子类来对文件
处理,因为这些子类与具体的I/O设备相对应
10.使用InputStream和OutputStream流类:
注意:虽然字节流可以操作文本文件,但不提倡这样做,因为字节流操作文本文件,如果文件
中有汉字,可能出现乱码。这是因为字节流不能直接操作Unicode字符所致。
建议使用字符流操作文本文件
11.输入输出的应用:
文件输入输出流:
FileInputSteam和FileOutputStream分别是InputSteam,OutputStream
的直接子类,这两个子类主要是负责负责对本地磁盘文件的顺序输入和输出操作的流。
FileInputSteam类的对象表示一个文件字节输入流,从中可读取一个或一批字节。在生成
FileInputSteam类的对象时,若指定的文件找不到,则抛出FileNotFoundException异常
,该异常必须捕获或声明抛出。
FileOutputStream类的对象表示一个文件字节输入流,可向六中写入一个或一批字节
在生成FileOutputSteam类的对象时,若指定的文件不存在,则创建一个新的文件,若已存在,
则清除原文件的内容。在进行文件的读写操作时会产生IOException异常,该异常必须捕获或
声明抛出
12.FileDescriptor是java.io包中定义的另一个类,该类不能实例化,该类中有三个静态成员
:in,ou,err,分别对应标准输入流,标准输出流,标准错误流
13.在主方法头添加throws IOException就不用在方法中添加catch语句捕获输入输出异常了
14.fi.available():返回流中的可读取的字节数
fi.read(b);//将图像文件读入b数组
fo.write(b);//将数组b中数据写入新文件“风景1.jpg”
15.顺序输入输出流(SequenceInputStream):
其功能是将多个输入流顺序连接在一起,形成单一的输入输出流,。没有对应的输出流存在。
在进行输入时,顺序输入流依次打开每个输入流并读取数据,在读取完毕后将该流关闭,然后
自动切换到下一个输入流。
也就是说,当一个流中读取数据遇到EOF时,SequenceInputStream将自动转向下一个输入流,
直到构成SequenceInputStream类的最后一个输入流读取到EOF时为止。
16.管道输入输出流(PipedInputStream)(PipedOutputStream):
管道字节输入流PipedInputStream和管道字节输出流PipedInputStream类提供了利用管道
方式进行数据输入个数据输出管理的类。
17.管道流用来将一个程序或线程的输出连接到另外一个程序或线程作为输入,使得相连线程
能够通过PipedInputStream和PipedInputStream流进行数据交换,从而实现程序内部线程
间的通信或不同程序间的通信
18.PipedInputStream和PipedOutputStream类是InputStream和OutputStream的直接子类
这两个类必须结合使用,其中,管道输入流作为管道的接收端,管道输出流作为管道的发送端
19.PipedInputStream是管道的接收端,它必须与一个作为发送端的PipedOutputStream
对象相连;PipedOutputStream是管道的发送端,它必须与一个作为接收端的
PipedInputStream对象相连
20.管道输入输出流提供了两种连接方法:
第一种在构造方法中给出对应的管道流,在创建对象时进行连接。构造如下:
1)PipedInputStream(PipedOutputStream src),创建一个管道输入流,并将其连接到
接收端src的管道字节输出流
PipedOutputStream(PipedInputStream src),创建一个管道输出流,并将其连接到
发送端src的管道字节输入流
2)第二种是利用管道字节输入输出流提供的connect()方法进行连接
PipedInputStream类的常用方法:管道连接方法
连接到指定输出流,管道输入流将从该输出流接收数据
public void connect(PipedOutputStream src)
PipedOutputStream 类的常用方法:管道连接方法
连接到指定输入流,管道输出流将从该输入流读取数据
public void connect(PipedInputStream snk)
总结:今天初步学习了java语言的输入输出流,了解了输入流和输出流,以及它们的子类
通过输入输出流类创建对象对文件进行读写操作,包括二进制文件还有文本文件都可以
另外,对管道输入输出的相互作用觉得跟用户和客户端有点相似
四月二十四号java基础知识的更多相关文章
- Java笔记(十四) 并发基础知识
并发基础知识 一.线程的基本概念 线程表示一条单独的执行流,它有自己的程序计数器,有自己的栈. 1.创建线程 1)继承Thread Java中java.lang.Thread这个类表示线程,一个类可以 ...
- 二十四、JAVA的NIO和IO的区别
一.JAVA的NIO和IO 1.NIO:面向缓冲区(buffer)(分为非阻塞模式IO和阻塞模式IO)组成部分:Channels管道,Buffers缓冲区,Selectors选择器 2.IO:面向流( ...
- Java基础(二十四)Java IO(1)输入/输出流
在Java API中,可以从其中读入一个字节序列的对象称作输入流,而可以向其中写入一个字节序列的对象称为输出流. 输入流的指向称为源,程序从指向源的输入流中读取数据. 输出流的指向是字节要去的目的地, ...
- Android学习笔记(四) JAVA基础知识回顾
一.接口 1)接口中定义的方法都是public权限,并且默认为public,而不是default. 2)接口的实现(implements)是特殊的继承,类似于父类子类的关系,可以向上转型(非常重要). ...
- 十四、Java基础---------String、StringBuffer、StringBuilder基本应用
在前面的博客中曾提及Java的数据类型分为基本数据类型,和引用数据类型,而String便是最常见的应用数据类型,本文将着重介绍这一引用数据类型的用法. String 字符串 String类是对 ...
- Python学习(二十四)—— 前端基础之Bookstrap
转载自:http://www.cnblogs.com/liwenzhou/p/8214637.html 一.Bootstrap介绍 Bootstrap是Twitter开源的基于HTML.CSS.Jav ...
- 二十八、Java基础--------正则表达式
在对字符串进行处理时一方面可以利用String对象的一些处理方法另一方面可以利用正则表达式,但是一般情况下用String对象方法进行处理起来会相对麻烦一些而正则表达式可以很方便的解决问题.为了更好的学 ...
- Bootstrap<基础二十四> 缩略图
Bootstrap 缩略图.大多数站点都需要在网格中布局图像.视频.文本等.Bootstrap 通过缩略图为此提供了一种简便的方式.使用 Bootstrap 创建缩略图的步骤如下: 在图像周围添加带有 ...
- java基础知识回顾之---java String final类普通方法
辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /* * 按照面向对象的思想对字符串进行功能分类. * ...
- (C/C++学习笔记) 二十四. 知识补充
二十四. 知识补充 ● 子类调用父类构造函数 ※ 为什么子类要调用父类的构造函数? 因为子类继承父类,会继承到父类中的数据,所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程. ...
随机推荐
- clamav测试用例 API
最近接触到clamav这一块,本身是一个很简单的任务,只需要调用他的API对文件进行检测即可,但是在进行大量搜索发现,网上最多只有API的讲解,且质量层次不齐,这可为难住我了,作为一个名副其实的&qu ...
- 2003031118—李伟—Python数据分析五一假期作业—MySQL的安装以及使用
项目 期中试卷 课程班级博客链接 20级数据班(本) 这个作业要求链接 作业要求 博客名称 2003031118-李伟-Python数据分析五一假期作业-MySQL的安装以及使用 要 ...
- sed随笔
sed [-hnV] [-e<script>][-f<script文件>] [文本文件] 参数说明: -e<script>或--expression=<sc ...
- C# 将实体转xml/xml转实体
xml转实体 /// <summary> /// 把xml转换成实体 /// </summary> /// <typeparam name="T"&g ...
- Docker部署【项目管理和问题跟踪工具-Redmine】
创建网络 docker network create redmine-network 启动Mysql数据库 docker run -d --name mysql --network redmine-n ...
- SDN实验环境配置
- 一、ptthon安装
1.在 Window 平台上安装 Python 的简单步骤,打开 WEB 浏览器访问:www.python.org,选择Downloads 2.然后在该页面选择需要下载的版本, 3.下载完成后直接双击 ...
- js实现切换页面清除定时器的函数
背景: 我在切换页面的时候,发现切换回原来的页面,定时器会叠加而不会清除原来的定时器 解决方法: 1.定义全局变量,通过js遍历清除(不会用,但性能好) var pageTimer = {} ; // ...
- SAP transformation特殊字符
unicode 0000 在transformation中总被翻译成,这个转义在其他语法中不存在,所以总是报错.
- WinHex恢复分区
情景再现:可能在某一天,打开电脑时发现只剩C盘,剩下的盘找不到了,那么要如何恢复呢? 创建虚拟硬盘方便我们做实验 右键计算机 -> 管理 -> 磁盘管理右键 -> 创建VHD虚拟硬盘 ...