Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
FileInputStream和FileOutputStream在Java中是如何工作的?_Java_File - Fatal编程技术网

FileInputStream和FileOutputStream在Java中是如何工作的?

FileInputStream和FileOutputStream在Java中是如何工作的?,java,file,Java,File,我正在阅读关于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 = nu

我正在阅读关于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.
输出到outreach.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.
  • 为什么即使我们正在阅读字符,作者也要使用
    int c

  • 为什么在while条件下使用
    -1

  • 如何
    out.write(c)方法将
    int
    再次转换为字符

  • 只要看一下文件就行了

    下面是读取文档的方法

    公共int read() 抛出IOException 从该输入流读取一个字节的数据。如果没有可用的输入,此方法将阻止

    指定人: 读入类输入流

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

    该int是下一组字节数据的值。 下面是答案

    1) 将字符分配给int时,它表示int的ascii数

    如果您感兴趣,这里是字符及其ascii码的列表

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

    3) 当您向print writer发送ascii代码时,它会将相应的字符打印到文件中

    1:现在我想问为什么writer使用int c?甚至我们都在读汉字

    将一个字节的数据返回为
    int
    。这是因为字节可以表示为
    int
    ,而不会丢失精度。请参阅以了解返回
    int
    而不是
    byte
    的原因

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

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

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

    将字节参数作为
    int
    。由于
    int
    跨越的值超过一个字节,因此忽略给定int的24个高阶位,使其成为一个字节兼容的值:Java中的
    int
    是。通过删除24个高阶位,可以将值降低到8位,即一个字节

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

    :

    从输入流读取数据的下一个字节。值字节作为0到255范围内的整数返回。如果由于到达流的结尾而没有字节可用,则返回值-1。此方法会一直阻塞,直到输入数据可用、检测到流结束或引发异常为止

    :

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


    它们不是字符,而是字节。你熟悉这本书吗?标准Java库中的每个类和每个方法都有解释,包括
    FileInputStream
    FileOutputStream
    的类和方法。当您不确定为什么要以这种方式调用某个方法时,向他们学习是很重要的。@Real怀疑论者Java教程文档看起来简单且用户友好,但Java api文档看起来乱七八糟。。这就是为什么我要阅读教程文档。我将尝试从那里阅读任何东西。它们不是学习如何编程的来源。它们是关于每门课的详细解释。因此,每次看到教程中使用的类时,都应该在API文档中查找它。这就是重要信息所在。@realponsignist好的,谢谢。5票赞成“我不想读JavaDoc,请做我的研究”的问题?@SURESH解释得很好。只有一个问题,字节如何转换为int?隐式的?为什么你在谈论字符和打印作者,而我们在这里专门处理字节流?这里没有
    char
    ,如果文件不是ASCII/UTF-8等格式,而是UTF-16格式,则读取的不一定是字符,而是单个字节。未完成。。一切都清楚了。。!!对不起,你所说的
    忽略了b的24个高位是什么意思。
    有什么例子吗?Java中的
    int
    总是32位。通过删除24个高阶位,可以将值降低到8位,即一个字节。快速问题:从文件中读取字节后,这些字节保存在何处:在RAM、缓冲区中。我的意思是如何将字节从输入流传递到输出流?