------- android培训、java培训、期待与您交流! ----------
一、
流有输入和输出,字节流是说输入和输出的都是字节形式,它们是用来处理非文本文件的,如图片,音频,视频等。
最基础的两个字节流是:InputStream和OutputStream。
InputStream构造方法:
InputStream()
;
InputStream的常用方法:
abstract int read();
int read(byte[] b);
void close();
OutputStream的构造方法:
OutputStream
();
OutputStream的常用方法:
abstract void write(int n); 这里的参数是int型,但是处理的都是字节,记住这里写的是数据n的低八位,也就是一个字节的数据。
void write(byte[] b);
void flush();
void close();
二、
InputStream的常用子类:FileInputStream,ObjectInputStream,BufferedInputStream。
1.FileInputStream是文件输入流。流是用来处理输入输出的数据,最基本的方式就是处理硬盘上的文件,FileInputStream就是文件输入流,把数据从文件输入到程序中。
其常用的方法有:
abstract int read();
int
read(byte[] b);
void
close();
构造方法有可用之处,但是其他方法和父类一样。
2.BufferedInputStream是缓冲输入流,顾名思义,提供缓冲,增加效率。虽然在父类中,我们用read(byte[] b)方法也可实现缓冲,提高效率,但是BufferedInputStream的使用更方便。另外需要注意的是,
BufferedInputStream并不是InputStream的直接子类,它们之间有一个叫FilterInputStream的类,它本身并没有特殊的地方,只是重写父类的方法,但它的子类有许多可取之处。
其常用构造方法:
BufferedInputStream(InputStream in)
;
其常用方法:
abstract int read();
int
read(byte[] b);
void
close();
它的特殊的地方在于,它的构造方法,需要传入一个字节输入流,而且他本身实现了缓冲技术,所以尽管一些方法和父类一样,但效率会高。
3.ObjectInputStream是对象处理流,它可以直接读一个对象,包括基本对象和引用对象。
其常用构造方法:
ObjectInputStream(InputStream in)
;
其常用方法:
readByte();readChar();等读取基本类型的方法。
String readUTF();这是这个类最精彩的地方,他有一个读取一个字符串的方法,这个方法是输入字节流中唯一的一个能够读取一个字符串的方法。
三、
OutputStream的常用子类:FileOutputStream,ObjectOutputStream,BufferedInputStream,PrintStream。
1.
FileOutputStream是文件输出流。把数据从程序输出到文件中。
其常用构造方法:
FileOutputStream
(
File
file);
FileOutputStream(String name)
;
FileOutputStream(String name, boolean append)
前两个方法和输入流相似,第三个方法有另一个参数boolean append,其值如果为true,则在文件尾部续写,为false则覆盖文件。
其常用方法:
abstract void write(int n);
void write(byte[] b);
void flush();
void close();
常用方法和父类相似。
2.BufferedInputStream是输出缓冲流,可以提高效率。他的直接父类也不是OutputStream,中间有一个
FilterOutputStream。
其常用构造方法:
BufferedOutputStream(OutputStream out)
其常用方法:void flush()等。
其构造方法需要传入一个字节输出流,其他方法和父类虽和父类相同,但提高了效率。
3.ObjectOutputStream,对象输出流,可以直接处理对象。
3.ObjectOutputStream,对象输出流,可以直接处理对象。
其构造方法:
ObjectOutputStream(OutputStream out)
其常用方法:
wirte(byte b);write(int n);等
writeUTF(String s)可以直接输出一个字符串,这也是他最精彩的地方。
PrintStream(OutputStream out, boolean autoFlush)
这个方法表示,如果第二个参数为true,则自动刷新,不需要flush()。
其常用方法:print(int i);print(char c);print(String s)
println();println(int i);println(char c);println(String s);
这个方法最精彩的地方就是可以方便的输出各种数据。
四、实现数据输入输出的代码,功能实现把一张图片读入程序,再输出到另一个地方,实现复制。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class StreamDemo {
public static void main(String[] args) {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream("D:\\1.jpg");
fos = new FileOutputStream("D:\\2.jpg");
copy4(fis,fos);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void copy4(FileInputStream fis,FileOutputStream fos)
throws IOException{
BufferedInputStream bis = new BufferedInputStream(fis);
BufferedOutputStream bos = new BufferedOutputStream(fos);
int ch = 0;
while((ch=bis.read()) != -1){
bos.write(ch);
}
}
}
System.in,接受键盘的输入,其类型是InputStream。
System.out,输出到控制台,其类型是PrintStream。
也就是说可以用上面讲过的方法处理System.in和System.out。