java常用字节流

常用的字节流有FileInputStream和FileOutputStream、BufferedInputStream和BufferedOutputStream、DataInputStream和DataOutputStream。

FileInputStream和FileOutputStream是基础的字节输入和输出流,通常在创建缓冲流时需要使用到,也可以用来做文件复制的功能。

 * fileInputStream和fileOutputStream字节输入输出流实现文件的复制
     *
     * @author:tuzongxun
     * @Title: fileInAndOuTest
     * @param
     * @return void
     * @date Jul 20, 2016 10:21:41 AM
     * @throws FileNotFoundException
     */
    public static void fileInAndOuTest() throws IOException {
        File file = new File("C:\\Users\\tuzongxun123\\Desktop\\ioTest1.txt");
        // 创建一个fileInputStream对象
        FileInputStream fileInputStream = new FileInputStream(file);
        FileOutputStream fileOutputStream = new FileOutputStream(new File("C:\\Users\\tuzongxun123\\Desktop\\ioTest.txt"));
        // 获取文件中字符的长度
        int leng = fileInputStream.available();
        System.out.println(leng);
        for (int i = 0; i < leng; i++) {
            // 读取每个字节
            int in = fileInputStream.read();
            System.out.print(in);
            // 把读取的字节写入到另一个文件
            fileOutputStream.write(in);
        }
        fileInputStream.close();
        // 使文件立即写入到磁盘
        fileOutputStream.flush();
        fileOutputStream.close();
    }

BufferedInputStream和BufferedOutputStream是缓冲字节输入输出流,相对于基础的字节流有更高的效率,而效率更高的原理在于用空间换取时间。
也就是说使用缓冲流的时候,会先把一定的数据放到缓冲区,也就是内存中,然后read的时候直接从缓冲区读取,这样就减少了读写磁盘文件的次数,从而减少读写时间。

/**
     * BufferedInputStream和BufferedOutputStream缓冲流复制文件
     *
     * @author:tuzongxun
     * @Title: bufferedTest
     * @param @throws IOException
     * @return void
     * @date Jul 21, 2016 9:05:57 AM
     * @throws
     */
    public static void bufferedTest() throws IOException {
        File file = new File("C:\\Users\\tuzongxun123\\Desktop\\ioTest1.txt");
        File file1 = new File("C:\\Users\\tuzongxun123\\Desktop\\ioTest2.txt");
        // 缓冲输入流对象,bis和bos作为缓冲区,
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
        // 缓冲输出流对象
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file1));
        //声明缓冲区大小
        byte[] byte1 = new byte[1024];
        while (bis.read(byte1) != -1) {
            bos.write(byte1);
        } ;
        // 将缓冲区中的数据全部写出
        bos.flush();
        bis.close();
        bos.close();
    }

DataInputStream和DataOutputStream被称为数据输入输出流,他们因为自己的特性而常被用于网络传输,它可以保证“无论数据来自何种机器,只要使用一个DataInputStream收取这些数据,就可用本机正确的格式保存它们.“
不过现在使用spring做文件上传和下载时我自己使用的是MultipartFile,所以也就没有做DataInputStream和DataOutputStream的例子。
MultipartFile上传文件的例子可以参考:
使用springMVC实现文件上传和下载之环境配置与上传

时间: 2024-12-25 09:40:32

java常用字节流的相关文章

java用字节流将字符保存到文本文件中,结果开头会多几个字符,结尾多个0,为什么啊?

问题描述 response.setCharacterEncoding("GBK");response.setContentType(Util.getContentType(fileName));response.setHeader("Content-Disposition","attachment;filename="+articleId+"."+downType);fos=response.getOutputStream()

Java常见面试题(含答案)

第一,谈谈final, finally, finalize的区别. final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 abstract的,又被声明为final的.将变量或方法声明为final,可以保证它们在使用中不被改变.被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改.被声明为final的方法也同样只能使用,不能重载 finally?再异常处理时提供 finally 块来执行任何

java 多态性详解及常见面试题_java

java多态性 多态分两种: (1)   编译时多态(设计时多态):方法重载. (2)   运行时多态:JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态.(我们平时说得多的事运行时多态,所以多态主要也是指运行时多态) 运行时多态存在的三个必要条件: 一.要有继承(包括接口的实现): 二.要有重写: 三.父类引用指向子类对象. 多态的好处: 1.可替换性(substitutability).多态对已存在代码具有可替换性.例如,多态对圆Circle类工作,对其他任

[JAVA软件工程师-面试宝典-2013最新版]

[JAVA面试宝典-2013最新版] 一. Java基础部分......................................................................................................2 1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?.....2 2.Java有没有goto?....................................................

我的Java开发学习之旅------&amp;gt;Java经典面试题

摘自张孝祥itcast 从享受生活的角度上来说:"程序员并不是一种最好的职业,我认为两种人可以做程序员,第一,你不做程序员,你就没有什么工作可做,或者说是即使有可以做的工作但是你非常不愿意去做:第二,你非常痴迷和爱好程序,并且在这方面有一些天赋和优势.程序员的结局也是有两种:第一,默默退休,第二以程序员为起点或跳板,注意积累,跟对了好的老板或团队,找到和很好的搭档自己创业,成为IT金领和富翁." 人们在时间面前是平等的,吾生也有涯,所以,你的经验更丰富点,那不算什么,经验是用时间积累的

各大公司Java后端开发面试题总结

ThreadLocal(线程变量副本) Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量. 采用空间换时间,它用于线程间的数据隔离,为每一个使用该变量的线程提供一个副本,每个线程都可以独立地改变自己的副本,而不会和其他线程的副本冲突. ThreadLocal类中维护一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值为对应线程的变量副本. ThreadLocal在Spring中发挥着巨大的作用,在管理Request作用域中的Bean.事

java实现u盘指定内容的自动复制

程序的功能是,检查U盘,并将U盘的内容自动拷贝到系统的某个盘符中.分享给大家,就当作是练习io流的小练习. 这个小程序的实现方法如下: 1.程序运行后隔一断时间就检查系统的盘符有没有增加,通过File.listRoots()可获取系统存在的盘符. 2.如果盘符增加了,遍历这个新增加的盘符,用字节流拷贝文件到指定的路径. 需要注意的是,由于U盘的内容可能很大,所以拷贝的时候最好指定要拷贝的文件类型,如ppt,doc,txt等等. 下面是这个小程序的相关代码: 在CopyThread类中可以指定要复

字节流-JAVA用二进制文件类复制图片抛出EOFException

问题描述 JAVA用二进制文件类复制图片抛出EOFException EOFException的意思我知道.我想知道怎么实现每次以4个字节的速度复制图片.用字符流会损坏图片,只能用字节流.字节流的子类DataInputStream和DataOutputStream配合每次就能传4个字节,传视屏不完整,但传图片就抛出EOFException.import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import j

统计某个路径下所有的java文件,以及统计代码数量

这个是我哥们遇到的一个面试题. 要求统计某个文件夹下,所有Java文件的数量,并且统计代码数量. Java文件中,所有的注视都是以//,没有/**/,空行不计入代码数量. 这个面试题,里面有这样几个难点, 1.遍历文件夹,因为文件夹下可能还有文件夹. 2.读取文件,判断代码行,注释行,和空行. 3.写入文件. 其实主要的都是对文件的操作. 代码可以直接复制运行,代码如下: package com; import java.io.BufferedReader; import java.io.Fil