JAVA输入输出流
概述:
各种流类型(类和抽象类)都位于位于java.io包中,各种流都分别继承一下四种抽象流中的一种:
类型 字节流 字符流 输入流 InputStream Reader 输出流 OutputStream Writer 应该将通用的域和方法放在超类中,对于无法具体定义的方法声明为不用实现的抽象方法,充当占位的角色,具体实现在子类中。包含一个或多个抽象方法的类也应该声明成抽象类,抽象类不能实例化,但是抽象类对象变量可以引用非抽象子类的对象以实现多态。
java中的字符(char类型)采用unicode字符集,标准的unicode编码方案为utf-16,每个字符占两个字节
对于英文16字节的高位为0,用字节流读取不成问题,但是对于中文应读取整个字符输出才有意义
stream结尾的都是字节流,对于程序来说,从外部数据相当于这些数据输入到程序中,故称读数据的流为输入流
另节点流/处理流(连接在已存在的流之上,通过对数据的处理为程序提供更强大的读写功能)
继承自InpuStream的流如FileInpuStream,DataInpuStream,ObjectInpuStream……
基本方法:
int read() throws IOException //读取一个字节并以整数形式返回(0~255),如果返回-1表示已到输入流的末尾
int read(byte[] buffer) throws IOException //读取一系列字节并存储到一个数组buffer,返回实际读取的字节数,如果返回-1表示已到输入流的末尾
int read(byte[] buffer, int offset, int length) throws IOException //从offset位置读取字节流并存储length个字节到一个数组buffer,返回实际读取的字节数,如果返回-1表示已到输入流的末尾
void close() throws IOException //关闭流释放内存资源
相应的OutputStream基本方法(方便起见,各方法均略去了throws IOException):
void write()
void write(byte[] buffer)
void write(byte[] buffer, int offset, int length)
void close() //应在close之前调用flush方法,以防缓冲区未满,程序未自动写入的数据在关闭流后再也无法写到文件
void flush() //将输出流中全部数据全部写出到目的地
Reader和InputStream基本相同,只是以字符(16bit)为读取单位.如BufferedReader、InputStreamReader、FileReader(继承自InputStreamReader )
基本方法也一样,只不过参数类型byte应改为char
Writer基本方法中多了写入字符串的方法:
void write(String string) throws IOEXception //实际上是string类调用了自身toCharArray方法
void write(String string , int offset, int length )throws IOEXception
节点流:
类型 字符流 字节流 File FileReader
FileWriterFileInputStream
FileOutputStreamMemory Array CharArrayReader
CharArrayWriterByteArrayInputStream
ByteArrayOutputStreamMemory String StringReader
StringWriter__
Pipe PipeReader
PipeWriterPipeInputStream
PipeOutputStream
主要注意四个文件流
public FileOutputStream(File file, boolean append) throws FileNotFoundException第二个参数为true时表示追加而不是覆盖
输出流再写操作时在文件没有的情况下会自动帮你创建一个文件,但不会创建文件夹,所以文件路径名中文件夹层次应该存在
处理流:
处理类型 字符流 字节流 Buffering BufferedReader
BufferedWriterBufferedInputStream
BufferedOutputStreamFiltering FileterReader
FilterWriterFilterInputStream
FilterOutStreamConverting between bytes and character InputStreamReader
OutputStreamWriter——
Object serialization ——
ObjectInputStream
ObjectOutputStreamData conversion ——
DataInputStream
DataOutputStreamCounting LineNumberReader LineNumberInputStream Peeking ahead PushbackReader PushbackInputStream Printing PrintWriter PrintStream
缓冲流:提高读写效率
BufferedReader(Reader in) 缓冲输入流其父类提供mark()、reset()方法、提供readLine()方法用于读一行
BufferedWriter(Writer out) 缓冲输出流使用flush方法可立刻写出缓冲区数、提供newLine()写一个行分隔符
BufferedInputStream(InputStream in) 缓冲输入流其父类提供mark()、reset()方法
BufferedOutputStream(OutputStream out) 缓冲输出流使用flush方法可立刻写出缓冲区数据
转换流:字节流转换为字符流,原来只能读写字节/字节数组,之后比如可以读写字符串、中文……
InputStreamReader(InputStream in) //转换流在构造时可以指定其编码集合
OutputStreamWrite(OutputStream out) //转换流在构造时可以指定其编码集合
注:java.lang.System类中有两个字段,即标准输入输出流,这两个流已默认打开,随时接受键盘输入和显示器输出
public static final InputStream in
public static final PrintStream out
数据流: 提供了与机器无关的读取JAVA原始数据类型(writeInt,writeDouble,writeBoolean,writeUTF等)的方法
DataInputStream(InputStream in) //先写进去先读出来
DataOutputStream(OutputStream out)
队列:先进先出,不同类型对应不同字节长度
打印流:为其他流添加打印功能,提供各种print方法可以方便地打印各种形式的数据。有不抛异常、自动flush的优点
PrintWriter() //有多个构造函数
PrintStream()
对象流:序列化,直接将Object写入或者读出。实现了Serializable接口(未定义任何方法,标记性接口,告诉编译器该类可序列化)的类才能序列化为一系列字节保存
ObjectInputStream()
ObjectOutputStream()
JAVA输入输出流的更多相关文章
- Java输入/输出流体系
在用java的io流读写文件时,总是被它的各种流能得很混乱,有40多个类,理清啦,过一段时间又混乱啦,决定整理一下!以防再忘 Java输入/输出流体系 1.字节流和字符流 字节流:按字节读取.字符流: ...
- 深入理解Java输入输出流
Java.io包的File类,File类用于目录和文件的创建.删除.遍历等操作,但不能用于文件的读写. Java 对文件的写入和读取涉及到流的概念,写入为输出流,读取为输入流.如何理解流的概念呢?可以 ...
- Java 输入输出流 转载
转载自:http://blog.csdn.net/hguisu/article/details/7418161 1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作. Java所 ...
- Java输入输出流(一)——常用的输入输出流
1.流的概念:在Java中,流是从源到目的地的字节的有序序列.Java中有两种基本的流--输入流(InputStream)和输出流(OutputStream). 根据流相对于程序的另一个端点的不同,分 ...
- java 输入输出流1 FileInputStrem&&FileOutStream
通过文件输入流读取问价 package unit6; import java.io.FileInputStream; import java.io.FileNotFoundException; imp ...
- java输入输出流总结 转载
一.基本概念 1.1 什么是IO? IO(Input/Output)是计算机输入/输出的接口.Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是 ...
- java输入输出流(内容练习)
1,编写一个程序,读取文件test.txt的内容并在控制台输出.如果源文件不存在,则显示相应的错误信息. package src; import java.io.File; import java.i ...
- Java输入输出流(转载)
转自http://blog.csdn.net/hguisu/article/details/7418161 目录(?)[+] 1.什么是IO Java中I/O操作主要是指使用Java进行输入,输出操作 ...
- 转 Java输入输出流详解(非常详尽)
转 http://blog.csdn.net/zsw12013/article/details/6534619 通过数据流.序列化和文件系统提供系统输入和输出. Java把这些不同来源和目标的数据都 ...
- java输入输出流(I/O)总结
io流的 四个基本类 java.io包中包含了流式I/O所需要的所有类.在java.io包中有四个基本类:InputStream.OutputStream及Reader.Writer类,它们分别处理字 ...
随机推荐
- jdbc java数据库连接 7)获取插入数据的自增长值
我们创建一个sql表,里面的数据往往都会有自增长值. 那么,我们用jdbc插入数据的时候,要想同时获得这个增长值. 代码: /** * * 这是插入一条数据的同时,获取该数据的则增长列的值(该例子的自 ...
- 极路由2(极贰)ROOT并刷了OpenWrt
绕过官方的ROOT 查了一下root教程, 如果还需要保留保修, 则需要自己想办法回退版本, 下载搜狐插件到sd卡, 找个linux系统修改sd卡上程序的执行权限, 然后才能开启ssh, 具体的方法可 ...
- 主席树——求静态区间第k大
例题:poj2104 http://poj.org/problem?id=2104 讲解:http://blog.sina.com.cn/s/blog_6022c4720102w03t.html ht ...
- 将 instance 连接到 flat_net - 每天5分钟玩转 OpenStack(88)
上一节我们创建了 "flat_net",本节将在此网络中部署 instance 并验证连通性. launch 新的 instance “cirros-vm1”,选择网络 falt_ ...
- 如何用Unity创建一个的简单的HoloLens 3D程序
注:本文提到的代码示例下载地址>How to create a Hello World 3D holographic app with Unity 之前我们有讲过一次如何在HoloLens中创建 ...
- 协程--gevent模块(单线程高并发)
先恶补一下知识点,上节回顾 上下文切换:当CPU从执行一个线程切换到执行另外一个线程的时候,它需要先存储当前线程的本地的数据,程序指针等,然后载入另一个线程的本地数据,程序指针等,最后才开始执行.这种 ...
- Java各种数据结构实现
1.单向链表 实现思路:创建Node类,包括自己的数据和指向下一个:创建Node类,包括头尾节点,实现添加.删除.输出等功能. tips:n = n.next不破坏链表结果,而n.next = n.n ...
- 一个python的邮件发送脚本,自动,定时,可以附件发送,抄送,附有说明文件
#!/bin/env python # -*- coding: utf-8 -*- import datetime import smtplib import os,sys from email.mi ...
- asp.net mvc4 简单的服务器监控开发之C#获取服务器CPU、RAM、TCP等系统信息(上)
一.背景 前段时间服务器出了点问题,加上学业愈来愈紧张,写博文分享的时间越来越少.虽然不是第一次在博客园上写经验,但是近期分享的博文得到了不少的朋友支持和指正,在这里内心非常感激和开心.希望以后能认真 ...
- 【转】OpenGL多线程创建纹理,附加我的测试结果
原文地址 http://www.cnblogs.com/mazhenyu/archive/2010/04/29/1724190.html 关于这个问题以前只知道多个线程不能同时使用一个RC,结果为了能 ...