java IO教程《一》
2021/5/18 12:27:12
本文主要是介绍java IO教程《一》,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
IO教程
什么是IO?
Java的核心库java.io提供了全面的IO接口。包括:文件读写、标准设备输出等。Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。
发展历程
-
BIO(本文主要讲解,一下IO简称默认是BIO) 就是传统的 java.io 包,它是基于流模型实现的,交互的方式是同步、阻塞方式,也就是说在读入输入流或者输出流时,在读写动作完成之前,线程会一直阻塞在那里,它们之间的调用时可靠的线性顺序。它的有点就是代码比较简单、直观;缺点就是 IO 的效率和扩展性很低,容易成为应用性能瓶颈。
-
NIO 是 Java 1.4 引入的 java.nio 包,提供了 Channel、Selector、Buffer 等新的抽象,可以构建多路复用的、同步非阻塞 IO 程序,同时提供了更接近操作系统底层高性能的数据操作方式。
-
AIO 是 Java 1.7 之后引入的包,是 NIO 的升级版本,提供了异步非堵塞的 IO 操作方式,所以人们叫它 AIO(Asynchronous IO),异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。
OutputStream与InputStream
stream
流是数据序列。在Java中,流是由字节组成的。它被称为一条小溪,因为它就像一条不断流动的水流。 在Java中,会自动为我们创建3个流。所有这些流都与控制台相连。
1) System.out:标准输出流
2) System.in:标准输入流
3) System.err:标准错误流
让我们看看打印输出的代码和控制台的错误消息。
System.out.println("hello word"); System.err.println("hello word");
获取控制台输入流
int i=System.in.read();//获取console读取流 System.out.println((char)i);//打印
OutputStream与InputStream
- OutputStream
Java应用程序使用输出流将数据写入目的地;它可以是文件、数组、外围设备或套接字。
- InputStream
Java应用程序使用输入流从源读取数据;它可以是文件、数组、外围设备或套接字。
让我们通过下图来了解Java OutputStream和InputStream的工作原理。
IO过程
OutputStream类详解
OutputStream类是一个抽象类。它是表示字节输出流的所有类的超类。输出流接受输出字节并将它们发送到某个接收器。
- OutputStream的实用方法:
方法 | 说明 |
---|---|
public void write(int)throw IOException | 用于将字节写入当前输出流。 |
public void write(byte[])throw IOException | 用于将字节数组写入当前输出流。 |
public void flush()throw IOException | 刷新当前输出流。 |
| public void close()throw IOException| 用于关闭当前输出流。 |
- OutputStream层次结构
OutputStream层次结构
InputStream类详解
InputStream类是一个抽象类。它是表示字节输入流的所有类的超类。
- InputStream类详解的实用方法:
方法 | 说明 |
---|---|
public abstract int read()throw IOException | 从输入流中读取下一个字节的数据。它在文件末尾返回-1。 |
public int available()throw IOException | 返回可从当前输入流读取的字节数的估计值。 |
public void close()throw IOException | 用于关闭当前输入流。 |
- InputStream层次结构
inputStream层次结构
实战演练(文件流)
接一下讲一下最常用FileOutputStream 跟 FileInputStream两种文件IO流使用。
FileOutputStream
-
Java.io.FileOutputStream类的声明:
public class FileOutputStream extends OutputStream
显然FileOutputStream是OutputStream的一个具体实现类,用户写入文件流的。java中的OutputStream是一个顺序写入流,。
-
FileOutputStream 常用方法
方法 | 说明 |
---|---|
protected void finalize() | 用于清除与文件输出流的连接 |
void write(byte[]ary) | 用于将ary.length字节从字节数组写入文件输出流 |
void write(byte[]ari,int off,int len) | 用于从偏移量off开始将len字节从字节数组写入文件输出流 |
void write(int b) | 用于将指定的字节写入文件输出流 |
FileChannel getChannel() | 用于返回与文件输出流关联的文件通道对象 |
FileDescriptor getFD() | 用于返回与流关联的文件描述符 |
void close() | 关闭文件流 |
-
文件写入字节
import java.io.FileOutputStream; public class FileOutputStreamExample { public static void main(String args[]){ try{ FileOutputStream fout=new FileOutputStream("D:\\testout.txt"); fout.write(65); fout.close(); System.out.println("success..."); }catch(Exception e){System.out.println(e);} } }
控制台输出
Success...
此时会发现我们的D盘里被写入了一个testout.txt文件。查看文件内容
A
-
文件写入字符串
import java.io.FileOutputStream; public class FileOutputStreamExample { public static void main(String args[]){ try{ FileOutputStream fout=new FileOutputStream("D:\\testout1.txt"); String s="hello word"; byte b[]=s.getBytes(); fout.write(b); fout.close(); System.out.println("success..."); }catch(Exception e){System.out.println(e);} } }
控制台输出
Success...
此时会发现我们的D盘里被写入了一个testout1.txt文件。查看文件内容
hello word
FileInputStream
-
Java.io.FileInputStream类的声明:
public class FileInputStream extends InputStream
显然FileInputStream是OutputStream的一个具体实现类,用户读取文件流的。
-
FileInputStream 常用方法
方法 | 说明 |
---|---|
int available() | 用于返回可从输入流读取的估计字节数 |
int read() | 用于从输入流中读取数据字节 |
int read(byte[] b) | 用于从输入流中读取最多为b.length字节的数据 |
int read(byte[]b,int off,int len) | 用于从输入流中读取从off起多达len字节的数据。 |
long skip(long x) | 用于跳过并丢弃输入流中的x字节数据 |
FileChannel getChannel() | 用于返回与文件输入流关联的唯一FileChannel对象 |
FileDescriptor getFD() | 用于返回FileDescriptor对象 |
protected void finalize() | 用于确保在没有更多文件输入流引用时调用close方法 |
void close() | 关闭文件流 |
-
文件读取字节
import java.io.FileInputStream; public class DataStreamExample { public static void main(String args[]){ try{ FileInputStream fin=new FileInputStream("D:\\testout.txt"); int i=fin.read(); System.out.print((char)i); fin.close(); }catch(Exception e){System.out.println(e);} } }
输出
A
-
文件读取字符串
当读取字符串时候需要一个个字节去读取,当读取不到数据时候会返回给我们index= -1,此时停止读取关闭流。
package com.javatpoint; import java.io.FileInputStream; public class DataStreamExample { public static void main(String args[]){ try{ FileInputStream fin=new FileInputStream("D:\\testout1.txt"); int i=0; while((i=fin.read())!=-1){ System.out.print((char)i); } fin.close(); }catch(Exception e){System.out.println(e);} } }
控制台输出
hello word
END
下篇讲解IO缓冲区流
欢迎关注公众号! 公众号回复:
入群
,扫码加入我们交流群!
点赞是认可,在看是支持
这篇关于java IO教程《一》的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15JavaMailSender是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-15JWT 用户校验学习:从入门到实践
- 2024-11-15Nest学习:新手入门全面指南
- 2024-11-15RestfulAPI学习:新手入门指南
- 2024-11-15Server Component学习:入门教程与实践指南
- 2024-11-15动态路由入门:新手必读指南
- 2024-11-15JWT 用户校验入门:轻松掌握JWT认证基础
- 2024-11-15Nest后端开发入门指南
- 2024-11-15Nest后端开发入门教程
- 2024-11-15RestfulAPI入门:新手快速上手指南