-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
字节流:
InputStream(读)
OutputStream(写)
用途,不操作文本(需要码表转换),操作图片类型的字节文件。也就是操作字节数据。
字符流使用的是字符数组。
字节流使用的是字节数组。
字节流在没有使用缓冲区时,不需要刷新动作,读一个字节写一个字节。
int available() 返回目标文件字符大小。
byte[] buf = new byte[fis.available()];//定义一个刚刚好的缓冲区。注:数据不能太大。
byte[] buf = new byte[1024];//主要的缓冲区定义方式。
字节流读写操作示例:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class InputStreamDemo {
public static void main(String[] args) throws IOException
{
output();
input();
}
//写数据
public static void output() throws IOException
{
String str = "abcdefg";
//定义写字符流
FileOutputStream fos = new FileOutputStream("test.txt");
fos.write(str.getBytes());
fos.close();
}
//读数据
public static void input() throws IOException
{
//定义读字符流
FileInputStream fis = new FileInputStream("test.txt");
byte[] by = new byte[1024];
int len =0;
while((len=fis.read(by))!=-1)
System.out.print(new String(by,0,len));
fis.close();
}
}
读的关键部分:
byte[] by = new byte[1024];//定义缓冲区
int len =0;
while((len=fis.read(by))!=-1)
System.out.print(new String(by,0,len));//将字节流转换从字符串打印
练习:复制图片
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyPic {
public static void main(String[] args) throws IOException {
//写
FileOutputStream fos = new FileOutputStream("阳懿1.jpg");
//读
FileInputStream fis = new FileInputStream("F:\\照片\\阳懿_11.jpg");
byte[] buf = new byte[1024];
int len1 = fis.available()/2;
int len = 0;
int sum = 0;
while((len=fis.read(buf))!=-1)
{
fos.write(buf, 0, len);
sum +=len;
if(sum>=len1)
break;
}
fis.close();
fos.close();
}
}
用BufferedInputStream和BufferedOutputStream复制mp3文件
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 CopyMp3 {
public static void main(String[] args) throws IOException
{
FileInputStream fis = new FileInputStream("F:\\音乐\\漂洋过海来看你.mp3");
BufferedInputStream bis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream("漂洋过海来看你.mp3");
BufferedOutputStream bos = new BufferedOutputStream(fos);
long start = System.currentTimeMillis();
byte[] by = new byte[1024];
int len = 0;
while((len = bis.read(by))!=-1)
{
bos.write(by,0,len);
//bos.write(len);
}
bis.close();
bos.close();
long end = System.currentTimeMillis();
System.out.println(end - start + "毫秒");
}
}
读取键盘录入。
import java.io.BufferedInputStream;
import java.io.IOException;
public class SystemInDemo {
public static void main(String[] args) throws IOException
{
BufferedInputStream bi = null;
byte[] by = new byte[1024];
while(true)
{
bi = new BufferedInputStream(System.in);
bi.read(by);
System.out.println(new String(by).toString());
}
}
}
InputStreamReader:字节流通向字符流的桥梁。
构造时必须传入一个字节流。
简化形式:键盘录入。
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
OutputStreamWriter:字符流转向字节流的桥梁。
字符输出到控制台。
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
流操作的基本规律:
流对象比较多,必须明确用哪个。
1、明确源和目的。
源:输入流。 InputStream Reader
目的:输出流。OutputStream Writer
2、操作的数据是否是纯文本。
是:字符流。
不是:字节流。
3、当体系明确后,在明确要使用哪个具体的对象。
通过设备来区分:
源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台。
扩展:
把录入的数据按照指定的编码表(utf-8),将数据存入文件中。FileWriter等流默认的码表为GBK。
OutputStreamWriter。可以用指定的码表写入文件。
转换流的由来,码表的选择。
System.setIn();改变System.in的指定设备。
System.setOut();改变System.out的指定设备。
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------