本帖最后由 Jacky_Chen1990 于 2013-5-14 01:14 编辑
在经过一个小时的整理之后,新鲜出炉的知识点和代码和大家见面了。希望大家吃的可口。我也要睡觉去了。。。
ok 夜宵大餐送上。
申明:这些东西大部分都是自己手打出来的,如果有问题,还希望大家可以提出来,为了我们的后代着想。。哦不。是后人。顶一个 不会怀孕哦。~
字节流知识点整理
字节流的老大:InputStream,OutputStream.两者都是抽象的。
这两位老大,都年事已高了,自然需要一些年轻人来干事。
以下列出常见的字节流类。
InputStream 下: AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream OutputStream下: ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream, OutputStream, PipedOutputStream
这里我只介绍FileInputStream 以及FileOutputStream的相关知识点。
首先看一下他们的一些常用方法,所谓砍柴不误磨刀工。你没筷子吃什么饭,用手么。原始人了么。。。。
1. FileInputStream 从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。 a) 首先是构造方法
b) FileInputStream的常用方法,继承的一些方法不再赘述。
2. 文件输出流是用于将数据写入File 或FileDescriptor 的输出流。文件是否可用或能否可以被创建取决于基础平台。特别是某些平台一次只允许一个FileOutputStream(或其他文件写入对象)打开文件进行写入。在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。 a) 首先是构造方法
b) FileOutputStream的常用方法,继承的一些方法不再赘述。
这里容我直接上代码,这样大家可以更好地理解这些知识点。{:soso_e151:}
A) 复制图片 ps:这里只写主要方法,不附全部代码。 -
- //这里的方法是读一个字节,写入一个字节,效率是最低的。
- public static void copy_pic_1() throws Exception {
- FileInputStream fis = new FileInputStream(new File("F:\\pic\\1.JPG"));
- FileOutputStream fos = new FileOutputStream(new File("F:\\1_copy.jpg"));
-
- int read = 0;
- while((read=fis.read())!=-1) {
- fos.write(read);
- }
-
- fos.close();
- fis.close();
- }
-
- //通过字节数组进行读取和写入操作,效率较高。
- public static void copy_pic_2() throws Exception {
- FileInputStream fis = new FileInputStream(new File("F:\\pic\\1.JPG"));
- FileOutputStream fos = new FileOutputStream(new File("F:\\1_copy.jpg"));
-
- int len = 0;
- byte[] buf = new byte[1024];
-
- while((len=fis.read(buf))!=-1) {
- fos.write(buf, 0, len);
- }
- fos.close();
- fis.close();
- }
- }
复制代码B) 复制MP3 ps:这里只写主要方法,不附全部代码。 -
- public static void copyMP3_1() throws IOException{
- BufferedInputStream bufis = new BufferedInputStream(new FileInputStream("C:\\0.mp3"));
- BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("D:\\1.mp3"));
-
- int read = 0;
-
- while((read=bufis.read())!=-1) {
- bufos.write(read);
- }
-
- bufos.close();
- bufis.close();
- }
-
- public static void copyMP3_2() throws IOException{
- BufferedInputStream bufis = new BufferedInputStream(new FileInputStream("C:\\0.mp3"));
- BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("D:\\1.mp3"));
-
- int len=0;
- byte[] buf = new byte[1024];
-
- while((len=bufis.read(buf))!=-1) {
- bufos.write(buf,0,len);
- }
-
- bufos.close();
- bufis.close();
- }
-
- }
复制代码 C) 自定义缓冲区来实现MP3的复制 ps:这里只写主要方法,不附全部代码。
主要问题,已经有所注释了。 -
- class MyBufferedInputStream{
- private InputStream in;
- private byte[] buf = new byte[1024];
-
- private int pos = 0,count = 0;
-
- MyBufferedInputStream(InputStream in){
- this.in = in;
- }
-
- //一次读一个字节,从缓冲区(字节数组)获取。
- public int myRead() throws IOException {
- //通过in对象读取硬盘上数据,并存储到buf中
- if(count == 0) {
- //读取第一此后,count=1024,buf数组中装了读入的数据
- count = in.read(buf);
- //System.out.println(count);
- if(count<0)
- return -1;
- pos = 0;
- byte b = buf[pos];
-
- count--;
- pos++;
-
- //这是为了防止出现-1的产生,b是byte型的,而返回的是int,所以需要与的操作。
- //具体的说:需要将byte提升到int类型,需要将原来的byte&255,就得到了需要的数据。
- //总结的说就是讲byte的一个字节,提升为Int的4个字节。
- return b&255;
- } else if(count>0) {
- //count=1023后,一直在将数据装入,并且count--,指针pos++
- byte b = buf[pos];
- count--;
- pos++;
- return b&0xff;//oxff是255的16进制形式。
- }
- return -1;
- }
- public void myClose() throws IOException {
- in.close();
- }
- }
-
复制代码知识点到此就结束了。
这里再送上技术分的快速得分法门,希望可以帮助你早日得道!
技术分,你让我又爱又恨~~~
|