繁体   English   中英

FileInputStream和FileOutputStream如何在Java中工作?

[英]How FileInputStream and FileOutputStream Works in Java?

我正在阅读Java Tutorials Docs中Java中的所有输入/输出流。 教程编写者使用此示例:

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

public class CopyBytes {
    public static void main(String[] args) throws IOException {

        FileInputStream in = null;
        FileOutputStream out = null;

        try {
            in = new FileInputStream("xanadu.txt");
            out = new FileOutputStream("outagain.txt");
            int c;

            while ((c = in.read()) != -1) {
                out.write(c);
            }
        } finally {
            if (in != null) {
                in.close();
            }
            if (out != null) {
                out.close();
            }
        }
    }
}

xanadu.txt文件数据:

In Xanadu did Kubla Khan
A stately pleasure-dome decree:
Where Alph, the sacred river, ran
Through caverns measureless to man
Down to a sunless sea.

输出到outagain.txt文件:

In Xanadu did Kubla Khan
A stately pleasure-dome decree:
Where Alph, the sacred river, ran
Through caverns measureless to man
Down to a sunless sea.
  1. 为什么即使我们正在阅读字符,作者也会使用int c

  2. 为什么在条件下使用-1

  3. 怎么out.write(c); 方法将int转换为再次字符?

1:现在我想问为什么作家使用int c? 即使我们正在读人物。

FileInputStream.read()int返回一个数据字节。 这是有效的,因为一个字节可以表示为int而不会损失精度。 请参阅此答案以了解为什么返回int而不是byte

2:第二个为什么在条件下使用-1?

到达文件末尾时,返回-1。

3:如何out.write(c); 方法将int转换为再次字符? 在outagain.txt文件中提供相同的输出

FileOutputStream.write()将一个byte参数作为int 由于int跨越多于一个字节的值,因此忽略给定int的24个高位,使其成为字节兼容的值:Java中的int 总是32位 通过删除24个高位,您可以达到8位值,即一个字节。

我建议你仔细阅读每种方法的Javadocs。 作为参考,他们回答了您的所有问题:

read

从输入流中读取下一个数据字节。 值字节作为int返回,范围为0到255.如果没有字节可用,因为已到达流的末尾,则返回值-1。 此方法将阻塞,直到输入数据可用,检测到流的末尾或抛出异常。

write

将指定的字节写入此输出流。 写入的一般合同是将一个字节写入输出流。 要写入的字节是参数b的八个低位。 b的24个高位被忽略。

只需阅读文档。

这里是read方法docs http://docs.oracle.com/javase/7/docs/api/java/io/FileInputStream.html#read()

public int read()throws IOException从此输入流中读取一个数据字节。 如果尚未提供输入,此方法将阻止。

指定者:在类InputStream中读取

返回:数据的下一个字节,如果到达文件末尾,则返回-1。

那个int是你的下一组字节数据。 现在,这是答案。

1)当你为一个int赋一个char时,它表示它是int的ascii数。

如果您有兴趣,请在此处列出字符及其ascii代码列表https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html

2)-1如果到达文件的末尾。 所以这是对数据的检查存在与否。

3)当您向打印编写器发送ascii代码时,它会将相应的char打印到文件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM