1:一些前提知识

1.概念

        IO流用来处理设备之间的数据传输, Java对数据的操作是通过流的方式, Java用于操作流的类都在IO包中.

        *流按流向分为两种:输入流,输出流。

        *流按操作类型分为两种:

                *字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的

                *字符流 : 字符流只能操作纯字符数据,比较方便。

2. IO流常用父类

        *字节流的抽象父类:

                *InputStream

                *OutputStream

        *字符流的抽象父类:

                *Reader

                *Writer       

                JAVA之浅谈字节流  

3.字节流:

1.Fileinputstream: 
    fis.read();
2. FileOutputStream:
    fos.write(a);
    写字符串  fos.writer(str.getbyte());
3. 文件拷贝:6行代码必须掌握
4. 定义小数组进行copy
    fos.write(arr);会出现有字母没有被覆盖的情况。需要使用fos.write(arr, 0, len);放多少考多少。
5. BufferedInputStream进行拷贝, 内部定义了一个8192个byte的缓冲区。
6. 读中文的问题 
    * 字节流读取中文的问题
    * 字节流在读中文的时候有可能会读到半个中文,造成乱码 
    * 字节流写出中文的问题
    * 字节流直接操作的字节,所以写出中文必须将字符串转换成字节数组 
    * 写出回车换行 write("\r\n".getBytes());

 

JAVA之浅谈字节流


2:操作文件的字节流FileInputStream和FileOutputStream

package henu.rjxy.stream;


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;


//拷贝文件
public class Demo03Copy {


public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("file1.txt");  //创建输入流对象
FileOutputStream fos = new FileOutputStream("copyfile1.txt");  //创建输出流对象

int b = 0;
while ((b = fis.read()) != -1) {   // 不断的读取每一个字节
fos.write(b);      //将每一个字节写出
}  

//关流释放资源
fis.close();
fos.close();   

}
}

3:字节流的缓冲区(自定义)

package henu.rjxy.stream;


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;


/*
 * 定义小数组进行copy
 */
public class Demo04CopyArray {


public static void main(String[] args) throws IOException {
demo1();
//demo2();
}


private static void demo2() throws IOException {
FileInputStream fis = new FileInputStream("Penguins.jpg");  //创建输入流对象
FileOutputStream fos = new FileOutputStream("copyfile1.jpg");  //创建输出流对象

byte[] arr = new byte[1024];  // 一般取1024的整数倍
int len = 0;
while ((len = fis.read(arr))!= -1) {
fos.write(arr, 0, len);
}

fis.close();
fos.close();
}

private static void demo1() throws IOException {
FileInputStream fis = new FileInputStream("file1.txt");  //创建输入流对象
FileOutputStream fos = new FileOutputStream("fileout.txt");  //创建输出流对象

byte[] arr = new byte[2];
int len = 0;
while ((len = fis.read(arr))!= -1) {    // 如果忘记加arr,返回的就不是读取的字节个数,而是字节的码表值
//fos.write(arr);  // 第一次取ab,第二次取发现只有一个字母了,c覆盖了a就变成了cb
fos.write(arr, 0, len);
}

fis.close();
fos.close();
}

}

4:字节缓冲流BufferedInputStream和BufferedOutputStream

package henu.rjxy.stream;


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 Demo05BufferCopy {


public static void main(String[] args) throws IOException {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("Penguins.jpg"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("bufferout.jpg"));

int b = 0;
while((b = bis.read())!= -1) {
bos.write(b);
}

bis.close();
bos.close();

}

}



相关文章: