`

FileInputStream/FileOutputStream的转换及对比

阅读更多

昨天看了段视频,突然发现自己对inputstream的read方法和outputstream的write方法在使用上还是不是很明白,早上来做了个测试,具体情况如下:

      第一个例子写法如下:

     

public static void main(String[] args) {

        try {
            FileInputStream fis = new FileInputStream("e:/linux.txt");
            FileOutputStream fos = new FileOutputStream("e:/test.txt");
            byte[] b = new byte[1024];
            int i = 0;
            try {
                while (fis.read(b) != -1) {
                    fos.write(b);
                    i++;
                    System.out.println("第" + i + "次输出:" + new String(b).toString());
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

 fis.read(b)方法会每次在fis中读取b.length个长度的字符到b中,然后用fos.write(b)方法将b中的内容写入到fos流中;测试结果是,发现e:/test.txt文件中的内容与e:/linux.txt中的内容大部分是相同的,只有最后结尾的时候多出了一些乱码,这些乱码是哪儿来的呢?后来又写了下面的一个例子:

public static void main(String[] args) {

        try {
            FileInputStream fis = new FileInputStream("e:/linux.txt");
            FileOutputStream fos = new FileOutputStream("e:/test.txt");
            byte[] b = new byte[1024];
            try {
                int length = 0;
                while ((length = fis.read(b)) != -1) {
                    System.out.println(length);
                    fos.write(b, 0, length);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

 运行结果显示:e:/test.txt文件中的内容与e:/linux.txt中的内容完全相同;后来对比了两种写法,发现第一种写法是有问题的,问题在于,如果读取的内容没有1024个字节,则写入到fos中还是以1024字节写入的,后面多余的是一些垃圾字节(不知道是什么数据)也会写入。

1
0
分享到:
评论
1 楼 李时增 2012-02-02  
确实...同感!

相关推荐

    java中各种流对比应用小结

    - `FileInputStream`/`FileOutputStream` - `DataInputStream`/`DataOutputStream` - **过滤流**(Filter Streams):包装另一个流,并在传递给该流之前增加额外的功能。 - `BufferedInputStream`/`...

    Java 中对文件的读写操作之比较

    - **FileInputStream/FileOutputStream** - 这是最基础的文件读写方式之一,适用于处理字节流。 - 优点:简单易用,适用于大多数情况。 - 缺点:功能相对有限,不支持缓冲或字符编码转换等功能。 - **...

    面试题 java方向 新版

    - 文件操作:File类的常用方法,以及FileReader/Writer、FileInputStream/FileOutputStream的使用。 - NIO(New IO):非阻塞I/O,通道(Channel)、缓冲区(Buffer)和选择器(Selector)的概念。 5. **反射机制...

    javamianshiti.rar_java面试笔试题_笔试题

    - 文件操作:掌握File类和FileInputStream/FileOutputStream的使用。 7. **反射API**: - 类的加载与实例化:通过Class对象动态获取类信息并创建对象。 - 获取类成员:获取字段、方法和构造器并进行调用。 - ...

    1000道 互联网Java工程师面试题 485页

    - 文件操作:掌握File类和FileInputStream/FileOutputStream的用法。 - NIO:介绍非阻塞I/O模型和相关类的使用。 8. **反射** - 类加载机制:理解类加载的过程和双亲委派模型。 - 动态代理:探讨动态代理在AOP...

    IO和NIO输入输出流

    2. 字节流:包括InputStream和OutputStream代表字节输入流和字节输出流,如FileInputStream和FileOutputStream用于文件操作。还有FilterInputStream和FilterOutputStream作为装饰者模式的实现,提供数据过滤和转换...

    java基础125道笔试题

    - 文件流(FileInputStream/FileOutputStream)的使用。 - 字节流与字符流的区别。 - BufferedInputStream/BufferedReader提高读取效率的方法。 - 对象流(ObjectInputStream/ObjectOutputStream)的使用场景。 ###...

    IO流面试题共5页.pdf.zip

    3. **流的层次结构**:掌握InputStream、OutputStream、Reader、Writer这四个基类,以及它们的子类如FileInputStream、FileOutputStream、 FileReader、FileWriter等。 4. **缓冲流**:了解BufferedInputStream、...

    java基础资料以及基本算法

    它可以自动处理字符编码转换,并且通常用于写入文本文件。 ```java FileWriter writer = new FileWriter("path/to/file"); writer.write("Hello, world!"); writer.close(); ``` ##### 性能对比分析 - **`...

    JavaIO和NIO练习

    例如,FileInputStream和FileOutputStream用于文件操作,BufferedReader和PrintWriter用于文本处理,SocketInputStream和SocketOutputStream则服务于网络通信。 Java NIO则在Java 1.4版本中引入,提供了一种非阻塞...

    第七届蓝桥杯大赛个人赛省赛(软件类)真题.zip

    4. **输入输出流**:FileInputStream、FileOutputStream、BufferedReader、PrintWriter等。 5. **多线程**:Thread类和Runnable接口,同步机制(synchronized关键字,wait/notify机制)。 6. **IO与NIO**:对比传统...

    Java北京科蓝笔试题及答案

    - 文件操作:File类的使用,FileInputStream和FileOutputStream进行文件读写。 - 缓冲流:BufferedReader和BufferedWriter提高读写效率。 - 转换流:InputStreamReader和OutputStreamWriter在字节流和字符流间...

    java 中InputStream,String,File之间的相互转化对比

    以下是关于这三者之间相互转化的方法及对比: 1. **String -> InputStream** 将一个String转化为InputStream,主要是将字符串转换成字节数组,然后创建一个ByteArrayInputStream。这种方法简单快捷,但会占用一定...

    java语言程序设计(Y. Daniel Liang著)第9版 课后编程题答案

    6. **输入/输出流**:学会使用System.in进行标准输入,FileInputStream和FileOutputStream进行文件读写,以及BufferedReader和PrintWriter等高级I/O操作。 7. **泛型**:理解泛型的概念,如何在类、接口、方法中...

    ITAT(java)历届试题答案(均调试通过)

    5. **输入/输出流**:Java的I/O流系统用于读写文件、网络通信等,如FileInputStream、FileOutputStream、BufferedReader、PrintWriter等类。 6. **多线程**:Java内置了对多线程的支持,包括Thread类、Runnable接口...

    java面试资源.zip

    - 文件操作:File类的使用,FileInputStream、FileOutputStream等流的读写。 - NIO(New IO):了解通道、缓冲区的概念,以及非阻塞I/O的优势。 8. **反射**: - Class类:获取类信息,动态创建对象,调用方法。...

    Java实效编程百例.rar

    Java的I/O流模型支持对文件的读写操作,如FileInputStream和FileOutputStream。此外,NIO(New Input/Output)提供非阻塞I/O操作,提高了文件操作的效率。 6. **数据库操作**: JDBC(Java Database Connectivity...

    Java面试重要知识点复习大纲.pdf

    5. **IO流**:理解流的分类(字节流、字符流)、流向(输入流、输出流),熟悉BufferedReader、BufferedWriter、FileInputStream、FileOutputStream等常用流对象。 **二、Web基础** 1. **HTTP协议**:掌握HTTP的...

Global site tag (gtag.js) - Google Analytics