![](/img/trans.png)
[英]How to make FileInputStream and FileOutputStream in a java class
[英]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.
为什么即使我们正在阅读字符,作者也会使用int c
?
为什么在条件下使用-1
?
怎么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.