JAVA-Stream(流)

Stream 流

数据流向

相对于程序来说的

读:输入流

写:输出流

读取方式

字节流:以字节为单位 每次读写1byte

字符流:以字符为单位 每次读写2byte

读取是否缓冲

低级流,没有缓冲区

高级流,存在缓冲区

·字节流

1、public abstract class OutputStream
实现子类
FileOutputStream
FileOutputStream 常用于写入诸如图像数据之类的原始字节的流    
构造方法摘要
FileOutputStream(File file) 
        创建一个向指定 File 对象表示的文件中写入数据的文件输出流。 
FileOutputStream(File file, boolean append)
        同上,只是append参数控制是否是追加写入
FileOutputStream(String name) 
        创建一个向具有指定名称的文件中写入数据的输出文件流。 
FileOutputStream(String name, boolean append) 
        同上,append控制是否是追加写入
FileOutputStream(FileDescriptor fdObj) 
        创建一个向指定文件描述符处写入数据的输出文件流,该文件描述符表示一个到文件系统中的某个实际文件的现有连接。
    暂不明
方法摘要

 void close() 
          关闭此文件输出流并释放与此流有关的所有系统资源。 
protected  void finalize() 
          清理到文件的连接,并确保在不再引用此文件输出流时调用此流的 close 方法。 
 FileChannel getChannel() 
          返回与此文件输出流有关的唯一 FileChannel 对象。 
 FileDescriptor getFD() 
          返回与此流有关的文件描述符。 
 void write(byte[] b) 
          将 b.length 个字节从指定 byte 数组写入此文件输出流中。 
 void write(byte[] b, int off, int len) 
          将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。 
 void write(int b) 
          将指定字节写入此文件输出流。

 从类 java.lang.Object 继承的方法
 void flush()
     刷新此输出流并强制写出所有缓冲的输出字节
 (OutputStream 的 flush 方法不执行任何操作)
2、public abstract class InputStream
实现子类
FileInputStream
FilterInputStream 包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。FilterInputStream 类本身只是简单地重写那些将所有请求传递给所包含输入流的 InputStream 的所有方法。FilterInputStream 的子类可进一步重写这些方法中的一些方法,并且还可以提供一些额外的方法和字段。   
字段摘要
protected     in 
InputStream    要过滤的输入流。 
构造方法摘要
懂得都懂
FileInputStream(File file);

FileInputStream(FileDescriptor fdObj); 

FileInputStream(String name); 
          
方法摘要
int available() 
          返回剩余未读取的字节数。 
 void close() 
          关闭此输入流并释放与此流关联的所有系统资源。 
 void mark(int readlimit)
          在输入流中的当前位置上作标记。 
 void reset() 
          将此流重新定位到对此输入流最后调用 mark 方法时的位置。 
 boolean markSupported() 
          测试此输入流是否支持 mark 和 reset 方法。 
 int read() 
          从此输入流中读取下一个数据字节。 
 int read(byte[] b) 
          从此输入流中将 byte.length 个字节的数据读入一个 byte 数组中。 
 int read(byte[] b, int off, int len) 
          从此输入流中将 len 个字节的数据读入一个 byte 数组中。 
 long skip(long n) 
          跳过和丢弃此输入流中数据的 n 个字节。 

·字符流

1. public abstract class Writer

字段摘要
protected  Object lock 
          用于同步针对此流的操作的对象。 
构造方法摘要
protected  Writer() 
          创建一个新的字符流 writer,其关键部分将同步 writer 自身。 
protected  Writer(Object lock) 
          创建一个新的字符流 writer,其关键部分将同步给定的对象。 
方法摘要
Writer append(char c) 
          将指定字符添加到此 writer。 
 Writer append(CharSequence csq) 
          将指定字符序列添加到此 writer。 
 Writer append(CharSequence csq, int start, int end) 
          将指定字符序列的子序列添加到此 writer.Appendableabstract  void close() 
          关闭此流,但要先刷新它。 
abstract  void flush() 
          刷新该流的缓冲。 
 void write(char[] cbuf) 
          写入字符数组。 
abstract  void write(char[] cbuf, int off, int len) 
          写入字符数组的某一部分。 
 void write(int c) 
          写入单个字符。 
 void write(String str) 
          写入字符串。 
 void write(String str, int off, int len) 
          写入字符串的某一部分。 

2. public abstract class Reader

字段摘要
protected  Object lock 
          用于同步针对此流的操作的对象。 
构造方法摘要
protected  Reader() 
          创建一个新的字符流 reader,其重要部分将同步其自身的 reader。 
protected  Reader(Object lock) 
          创建一个新的字符流 reader,其重要部分将同步给定的对象。 

方法摘要
 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) 
          跳过字符。 

(在实现字符流时,使用其两个对应的子类 FileWriter 和 FileReader)

3、使用其子类 FileWriter

用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在 FileOutputStream 上构造一个 OutputStreamWriter。

构造方法摘要
FileWriter(Filefile) 根据给定的 File 对象构造一个 FileWriter 对象。
[FileWriter](mk:@MSITStore:H:\课程资料\黑马\授课讲解\小工具\JDK_API_1_6_zh_CN.CHM::/java/io/FileWriter.html#FileWriter(java.io.File, boolean))(Filefile, boolean append) 根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(StringfileName) 根据给定的文件名构造一个 FileWriter 对象。
[FileWriter](mk:@MSITStore:H:\课程资料\黑马\授课讲解\小工具\JDK_API_1_6_zh_CN.CHM::/java/io/FileWriter.html#FileWriter(java.lang.String, boolean))(StringfileName, boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
特点:

1、如果写出的文件不存在,就创建一个空的文件。

2、字符输出流一定要调用flush方法或者close能把缓冲区中的数据写出到文件中。

4、使用子类FileReader

构造方法摘要
FileReader(Filefile) 在给定从中读取数据的 File 的情况下创建一个新 FileReader
FileReader(FileDescriptorfd) 在给定从中读取数据的 FileDescriptor 的情况下创建一个新 FileReader
FileReader(StringfileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader

同类 FileInputSystem的方法

·转换流

把字节流转换成字符流。
InputStream --> Reader

类 InputStreamReader 是Reader的子类 FileReader的父类

每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。 

为了达到最高效率,可要考虑在 BufferedReader 内包装 InputStreamReader。

构造方法摘要
InputStreamReader(InputStream in) 
          创建一个使用默认字符集的 InputStreamReaderInputStreamReader(InputStream in, Charset cs) 
          创建使用给定字符集的 InputStreamReader
方法摘要
 void close() 
          关闭该流并释放与之关联的所有资源。 
 String getEncoding() 
          返回此流使用的字符编码的名称。 
 int read() 
          读取单个字符。 
 int read(char[] cbuf, int offset, int length) 
          将字符读入数组中的某一部分。 
 boolean ready() 
          判断此流是否已经准备好用于读取。 

OutputStream --> Writer

类 OutputStreamWriter 是Writer的子类 FileWriter的父类

OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。 

每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累积。可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。注意,传递给 write() 方法的字符没有缓冲。 

为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器。

构造方法摘要

OutputStreamWriter(OutputStream out) 
          创建使用默认字符编码的 OutputStreamWriterOutputStreamWriter(OutputStream out, Charset cs) 
          创建使用给定字符集的 OutputStreamWriter
方法摘要

 void close() 
          关闭此流,但要先刷新它。 
 void flush() 
          刷新该流的缓冲。 强制写入
 String getEncoding() 
          返回此流使用的字符编码的名称。 
 void write(char[] cbuf, int off, int len) 
          写入字符数组的某一部分。 
 void write(int c) 
          写入单个字符。 
 void write(String str, int off, int len) 
          写入字符串的某一部分。 

·缓冲流

1.public class BufferedWriter 缓冲输出流java.io

将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。 
可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。 

构造方法摘要
BufferedWriter(Writer out) 
          创建一个使用默认大小输出缓冲区的缓冲字符输出流。
BufferedWriter(Writer out, int sz) 
          创建一个使用给定大小输出缓冲区的新缓冲字符输出流。

方法摘要
 void	close() 
          关闭此流,但要先刷新它。
 void	flush() 
          刷新该流的缓冲。
 void	newLine() 
          写入一个行分隔符'\n'void	write(char[] cbuf, int off, int len) 
          写入字符数组的某一部分。
 void	write(int c) 
          写入单个字符。
 void	write(String s, int off, int len) 
          写入字符串的某一部分。

把字节流转换成缓冲流:OutputStreamWriter(new FileOutputStream(""))

2.public calss BufferedReader 缓冲输入流java.io

从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 
可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。

构造方法摘要
BufferedReader(Reader in) 
          创建一个使用默认大小输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz) 
          创建一个使用指定大小输入缓冲区的缓冲字符输入流。

方法摘要
 int read() 
          读取单个字符。
 int read(char[] cbuf, int off, int len) 
          将字符读入数组的某一部分。
 String readLine() 
          读取一个文本行。

·标准流 System

in(输入流) out(输出流)

默认的标准输入流 是从键盘接受输入

默认的标准输出流 是向控制台 显示器输出
System静态方法
<i>操作数组
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 
          从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
    
<ii> 对象   
static Console console()//获取控制台 
          返回与当前 Java 虚拟机关联的唯一 Console 对象(如果有)。     
static int identityHashCode(Object x)//获取对象hashCode 
          返回给定对象的哈希码,该代码与默认的方法 hashCode() 返回的代码一样,无论给定对象的类是否重写 hashCode()<iii>与JVM虚拟机有关的
static void exit(int status) 
          终止当前正在运行的 Java 虚拟机。 
static void gc() 
          运行垃圾回收器。 
static void runFinalization() 
          运行处于挂起终止状态的所有对象的终止方法。 

<iv>与系统属性有关的:
static Map<String,String> getenv() 
          返回一个不能修改的当前系统环境的字符串映射视图。 
static String getenv(String name) 
          获取指定的环境变量值。 
static Properties getProperties() 
          确定当前的系统属性。 
static String getProperty(String key) 
          获取指定键指示的系统属性。 
static String getProperty(String key, String def) 
          获取用指定键描述的系统属性。 
static String clearProperty(String key) 
          移除指定键指示的系统属性。 
static void setProperties(Properties props) 
          将系统属性设置为 Properties 参数。 
static String setProperty(String key, String value) 
          设置指定键指示的系统属性。 
static void setSecurityManager(SecurityManager s) 
          设置系统安全性。 
static SecurityManager getSecurityManager() 
          获取系统安全接口。 
        
<v>    库和文件系统
static Channel inheritedChannel() 
          返回从创建此 Java 虚拟机的实体中继承的信道。 
static void load(String filename) 
          从作为动态库的本地文件系统中以指定的文件名加载代码文件。 
static void loadLibrary(String libname) 
          加载由 libname 参数指定的系统库。 
static String mapLibraryName(String libname) 
          将一个库名称映射到特定于平台的、表示本机库的字符串中。 
    
<vi>    时间
static long currentTimeMillis() 
          返回以毫秒为单位的当前时间。 
static long nanoTime() 
          返回最准确的可用系统计时器的当前值,以毫微秒为单位。 

重写分配标准流的方法
static void setErr(PrintStream err) 
          重新分配“标准”错误输出流。 
static void setIn(InputStream in) 
          重新分配“标准”输入流。 
static void setOut(PrintStream out) 
          重新分配“标准”输出流。 
PrintStream 被out 和 err 所使用
 
<i>构造方法摘要:
    重载类型: 指向文件;指向文件并设置编码;创建新的打印流;创建新的打印流并设置编码;用文件路径指向文件;用文件路径指向文件并设置编码
    参数:  autoFlush - boolean 变量;如果为 true,则每当写入 byte 数组、调用其中一个 println 方法或写入换行符或字节 ('\n') 时都会刷新输出缓冲区
<ii>方法摘要: 
PrintStream append(char c) 
          将指定字符添加到此输出流。 
PrintStream append(CharSequence csq) 
          将指定字符序列添加到此输出流。 
PrintStream append(CharSequence csq, int start, int end) 
          将指定字符序列的子序列添加到此输出流。 
boolean checkError() 
          刷新流并检查其错误状态。 
protected  void clearError() 
          清除此流的内部错误状态。 
void close() 
          关闭流。 
void flush() 
          刷新该流的缓冲。 
void write(byte[] buf, int off, int len) 
          将 len 字节从指定的初始偏移量为 off 的 byte 数组写入此流。 
void write(int b) 
          将指定的字节写入此流。 

PrintStream format(Locale l, String format, Object... args) 
          使用指定格式字符串和参数将格式化字符串写入此输出流中。 
PrintStream format(String format, Object... args) 
          使用指定格式字符串和参数将格式化字符串写入此输出流中。 

print(); // 这系列方法功能是打印没有其他方法;
printf(); // 这系列方法功能是格式化打印 字段format使用格式化占位符 args是参数占位符;
println();// 这系列方法功能是打印完毕后输出一个回车

InputStream 被 in 所使用

<i>构造方法摘要:
    此抽象类是表示字节输入流的所有类的超类。 

<ii>方法摘要:
    此抽象类是表示字节输入流的所有类的超类。 

·数据流

1、public class DataOutputStream extends FilterOutputStreamimplements DataOutput`

数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中。然后,应用程序可以使用数据输入流将数据读入。 
字段摘要
protected int written 到目前为止写入数据输出流的字节数。
构造方法
DataOutputStream(OutputStream out); 
	创建一个新的数据输出流

方法

void flush() 
          清空此数据输出流。 
 int size() 
          返回计数器 written 的当前值,即到目前为止写入此数据输出流的字节数。 
 void write(byte[] b, int off, int len) 
          将指定 byte 数组中从偏移量 off 开始的 len 个字节写入基础输出流。 
 void write(int b) 
          将指定字节(参数 b 的八个低位)写入基础输出流。 
 void writeBoolean(boolean v) 
          将一个 boolean 值以 1-byte 值形式写入基础输出流。 
 void writeByte(int v) 
          将一个 byte 值以 1-byte 值形式写出到基础输出流中。 
 void writeBytes(String s) 
          将字符串按字节顺序写出到基础输出流中。 
 void writeChar(int v) 
          将一个 char 值以 2-byte 值形式写入基础输出流中,先写入高字节。 
 void writeChars(String s) 
          将字符串按字符顺序写入基础输出流。 
 void writeDouble(double v) 
          使用 Double 类中的 doubleToLongBits 方法将 double 参数转换为一个 long 值,然后将该 long 值以 8-byte 值形式写入基础输出流中,先写入高字节。 
 void writeFloat(float v) 
          使用 Float 类中的 floatToIntBits 方法将 float 参数转换为一个 int 值,然后将该 int 值以 4-byte 值形式写入基础输出流中,先写入高字节。 
 void writeInt(int v) 
          将一个 int 值以 4-byte 值形式写入基础输出流中,先写入高字节。 
 void writeLong(long v) 
          将一个 long 值以 8-byte 值形式写入基础输出流中,先写入高字节。 
 void writeShort(int v) 
          将一个 short 值以 2-byte 值形式写入基础输出流中,先写入高字节。 
 void writeUTF(String str) 
          以与机器无关方式使用 UTF-8 修改版编码将一个字符串写入基础输出流。 

2、public class DataInputStream extends FilterInputStream implements DataInput`

数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。 
构造方法
DataInputStream(InputStream in) 
          使用指定的底层 InputStream 创建一个 DataInputStream

方法

 int read(byte[] b) 
          从包含的输入流中读取一定数量的字节,并将它们存储到缓冲区数组 b 中。 
 int read(byte[] b, int off, int len) 
          从包含的输入流中将最多 len 个字节读入一个 byte 数组中。 
 boolean readBoolean() 
          参见 DataInput 的 readBoolean 方法的常规协定。 
 byte readByte() 
          参见 DataInput 的 readByte 方法的常规协定。 
 char readChar() 
          参见 DataInput 的 readChar 方法的常规协定。 
 double readDouble() 
          参见 DataInput 的 readDouble 方法的常规协定。 
 float readFloat() 
          参见 DataInput 的 readFloat 方法的常规协定。 
 void readFully(byte[] b) 
          参见 DataInput 的 readFully 方法的常规协定。 
 void readFully(byte[] b, int off, int len) 
          参见 DataInput 的 readFully 方法的常规协定。 
 int readInt() 
          参见 DataInput 的 readInt 方法的常规协定。 
 String readLine() 
          已过时。 该方法无法将字节正确转换为字符。从 JDK 1.1 开始,读取文本行的首选方法是使用 BufferedReader.readLine() 方法。使用 DataInputStream 类读取文本行的程序可以改为使用 BufferedReader 类,只要将以下形式的代码: 
     DataInputStream d = new DataInputStream(in);
 替换为: 
     BufferedReader d
          = new BufferedReader(new InputStreamReader(in));
  
 long readLong() 
          参见 DataInput 的 readLong 方法的常规协定。 
 short readShort() 
          参见 DataInput 的 readShort 方法的常规协定。 
 int readUnsignedByte() 
          参见 DataInput 的 readUnsignedByte 方法的常规协定。 
 int readUnsignedShort() 
          参见 DataInput 的 readUnsignedShort 方法的常规协定。 
 String readUTF() 
          参见 DataInput 的 readUTF 方法的常规协定。 
static String readUTF(DataInput in) 
          从流 in 中读取用 UTF-8 修改版格式编码的 Unicode 字符格式的字符串;然后以 String 形式返回此字符串。 
 int skipBytes(int n) 
          参见 DataInput 的 skipBytes 方法的常规协定。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值