JAVA 流与文件

InputStream和OutputStream是所有的输入流和输出流的超类。他们两个都是抽象类。

read方法和write方法都是阻塞方法,这意味着如果不能里可以写入或者读取,比如因为网络问题,那么当前线程将会被阻塞。

InputStream的API:


方法摘要


int


available()
返回此输入流方法的下一个调用方可以不受阻塞地从此输入流读取(或跳过)的字节数。


void


close()
关闭此输入流并释放与该流关联的所有系统资源。


void


mark(int readlimit)
在此输入流中标记当前的位置。


boolean


markSupported()
测试此输入流是否支持 mark 和 reset 方法。


abstract int


read()
从输入流读取下一个数据字节。


int


read(byte[] b)
从输入流中读取一定数量的字节并将其存储在缓冲区数组 b 中。


int


read(byte[] b, int off, int len)
将输入流中最多 len 个数据字节读入字节数组。


void


reset()
将此流重新定位到对此输入流最后调用 mark 方法时的位置。


long


skip(long n)
跳过和放弃此输入流中的 n 个数据字节。

OutStream的API:


方法摘要


void


close()
关闭此输出流并释放与此流有关的所有系统资源。


void


flush()
刷新此输出流并强制写出所有缓冲的输出字节。


void


write(byte[] b)
将 b.length 个字节从指定的字节数组写入此输出流。


void


write(byte[] b, int off, int len)
将指定字节数组中从偏移量 off 开始的 len 个字节写入此输出流。


abstract void


write(int b)
将指定的字节写入此输出流。

Reader和Writer

用于读取和写入Unicode字符流的抽象类。和字节流的API类似。

看下面的API,何止是类似,兼职就是一样。因为不论是读取字节还是读取Unicode字符(这里其实是Unicode编码单元,2个字节),都是使用的int类型(4个字节)作为参数。


方法摘要


abstract void


close()
关闭该流。


void


mark(int readAheadLimit)
标记流中的当前位置。


boolean


markSupported()
判断此流是否支持 mark() 操作。


int


read()
读取单个字符。


int


read(char[] cbuf)
将字符读入数组。


abstract int


read(char[] cbuf, int off, int len)
将字符读入数组的某一部分。


int


read(CharBuffer target)
试图将字符读入指定的字符缓冲区。


boolean


ready()
判断是否准备读取此流。


void


reset()
重置该流。


long


skip(long n)
跳过字符。

组合流过滤器

如下使用:

DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream("person.dat")));

DataInputStream/ DataOutStream

数据输入流允许应用程序以与机器无关方式从基础输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。

通过它的方法可以看出它的常用使用场景:

BufferedInputStream/ BufferedOutStream

通过在内部维护一个缓冲区,每次执行read方法的时候,它底层其实是读取了固定大小数目的字节到内存的缓冲区中(通过构造参数可以配置每次读取字节的数目,也就是缓冲区的大小)中,然后下次读取的时候,直接从内存的缓冲区中拿,不同在通过原始的方式(如网络或者磁盘)。

write的时候,也是只写入到内部的缓冲区中,当缓冲区满了才会做真正的写入操作。

时间: 2024-11-08 22:26:45

JAVA 流与文件的相关文章

Java学习记录(补充八:Date类;Java流(Stream),文件(File)和IO)

Date类,Calendar类package Box1; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Random; //Date类 public class DateTest { public static void main(String[] args) { Date

java 流与文件理解

一.数据流 1.流 在Java中把不同的数据源与程序之间的数据传输都抽象表述为"流"(stream),以实现相对统一和简单的输入/输出操作方式.传输中的数据就像流水一样,也称为数据流. 2 .I/O数据流的分类方式 数据流分为输入流和输出流两类.输入流只能读取不能写.而输出流只能写不能读.(这里站在程序的角度来确定出入方向,即将数据从程序外部传送到程序中谓之"输入"数据,将程序中的数据传送到外部谓之"输出"数据.) 二.字符流 1.字符输入流Re

java基础:关于java流与文件操作

1.描述:流是字节数据或字符数据序列.Java采用输入流对象和输出流对象来支持程序对数据的输入和输出.输入流对象提供了数据从源点流向程序的管道,程序可以从输入流对象读取数据:输出流对象提供了数据从程序流向终点的管道,程序通过该管道把数据写到终点.所有的关于输入/输出的类都包含在java.io的包中.2.File类:它主要关心的是文件的具体属性,而非内容,定义了许多方法,实现对文件的创建.删除等操作.code:import java.io.*;public class Test{ public s

Java流,文件和I/O

java.io包中包含几乎所有可能永远需要在Java中执行输入和输出(I/ O)类.所有这些数据流代表一个输入源和输出目标. java.io包中的流支持多种数据,如基本类型,对象,本地化的字符等 流可以被定义为一个数据序列. InputStream用于读取从一个源数据,OutputStream是用于将数据写入到一个目的地. JAVA I/O提供了强有力,灵活的支持,因为它涉及到的文件和网络,但本教程介绍与流非常基本的功能和I / O.我们会来一个接一个看下面最常用的例子: 读取控制台输入: Ja

(转载)java基础:关于java流与文件操作

原文摘自: http://www.blogjava.net/haizhige/archive/2008/08/03/219668.html 1.描述:流是字节数据或字符数据序列. Java采用输入流对象和输出流对象来支持程序对数据的输入和输出.输入流对象提供了数据从源点流向程序的管道,程序可以从输入流对象读取数据:输出流对象提供了数据从程序流向终点的管道,程序通过该管道把数据写到终点.所有的关于输入/输出的类都包含在java.io的包中.2.File类:它主要关心的是文件的具体属性,而非内容,定

java流、文件以及IO

读写文件 一个流被定义为一个数据序列.输入流用于从源读取数据,输出流用于向目标写数据. 输入流和输出流的类层次图. FileInputStream FileInputStream用于从文件中读取数据,它的对象可以用关键字new创建, InputStream file = new FileInputStream("D:\BI\201603\MyBi"); 或者 File file = new File("D:\BI\201603\MyBi"); InputStream

java 流读写文件

public static void createFileToNewPath(InputStream inStream, String newPath) { try { int bytesum = 0; int byteread = 0; FileOutputStream fs = new FileOutputStream(newPath); byte[] buffer = new byte[1444]; while ((byteread = inStream.read(buffer)) !=

Java:IO流与文件基础

Java:IO流与文件基础 说明: 本文所有内容包含图片均为MrSaber自己编写,转载请练习我哦. 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象称作 输入流,可以向其中写入一个字节序列的对象称作 输出流. ? 这些字节序列的来源可以是:文件.网络连接.内存块等. ? 抽象类InputStream和OutputStream是构成输入/输出(I/O)的基础. ? 因为面向字节的流

java使用字节流和字符流实现文件复制

大家在Java开发中都会遇到文件复制的文件,众所周知,需要通过文件输入输出流实现. 那究竟该怎么做那,话不多说,直接上代码: 一,使用字节流复制文件 public class FileByteCopy {public static void main(String[] args) { FileByteCopy f= new FileByteCopy(); try { f.copy("d:/File/1.txt","d:/CopyFile/1.txt"); } cat