FileInputStream和FileOutputStream在Java中是如何工作的?
我正在阅读关于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
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
-1
out.write(c)代码>方法将int
再次转换为字符
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、缓冲区中。我的意思是如何将字节从输入流传递到输出流?