Java FileOutputStream和DataOutputStream出现问题
问题是,当我使用Java FileOutputStream和DataOutputStream出现问题,java,dataoutputstream,filestreams,Java,Dataoutputstream,Filestreams,问题是,当我使用FileOutputStream编写字符时,它是可读的。 但是,当我将其与DataOutputStream链接时,写入的数据变得不可读 为什么呢?因为FileOutputStream和DataInputStream都将字节写入文件。具体如何处理 代码: 在这种情况下,显示以下输出: 需要了解原因吗?差异不在于输出流,而在于您使用的写入方法:它们不同。在第一个示例中使用dp.write(),在第二个示例中使用dp.writeChar() 在第二个示例中,将dp.writeChar
FileOutputStream
编写字符时,它是可读的。
但是,当我将其与DataOutputStream
链接时,写入的数据变得不可读
为什么呢?因为FileOutputStream
和DataInputStream
都将字节写入文件。具体如何处理
代码:
在这种情况下,显示以下输出:
需要了解原因吗?差异不在于
输出流,而在于您使用的写入方法:它们不同。在第一个示例中使用dp.write()
,在第二个示例中使用dp.writeChar()
在第二个示例中,将dp.writeChar()
更改为dp.write()
,结果将与预期一致
java.io.DataOutputStream.writeChar(int)
方法实现如下:
public final void writeChar(int v) throws IOException {
out.write((v >>> 8) & 0xFF);
out.write((v >>> 0) & 0xFF);
incCount(2);
}
请参阅的源代码
而java.io.DataOutputStream.write(int)
有以下实现:
public synchronized void write(int b) throws IOException {
out.write(b);
incCount(1);
}
请参见的源代码差异不在于
输出流,而在于您使用的写入方法:它们不同。在第一个示例中使用dp.write()
,在第二个示例中使用dp.writeChar()
在第二个示例中,将dp.writeChar()
更改为dp.write()
,结果将与预期一致
java.io.DataOutputStream.writeChar(int)
方法实现如下:
public final void writeChar(int v) throws IOException {
out.write((v >>> 8) & 0xFF);
out.write((v >>> 0) & 0xFF);
incCount(2);
}
请参阅的源代码
而java.io.DataOutputStream.write(int)
有以下实现:
public synchronized void write(int b) throws IOException {
out.write(b);
incCount(1);
}
请参见的源代码差异不在于输出流,而在于您使用的写入方法:它们不同。在第一个示例中使用
dp.write()
,在第二个示例中使用dp.writeChar()
在第二个示例中,将dp.writeChar()
更改为dp.write()
,结果将与预期一致
java.io.DataOutputStream.writeChar(int)
方法实现如下:
public final void writeChar(int v) throws IOException {
out.write((v >>> 8) & 0xFF);
out.write((v >>> 0) & 0xFF);
incCount(2);
}
请参阅的源代码
而java.io.DataOutputStream.write(int)
有以下实现:
public synchronized void write(int b) throws IOException {
out.write(b);
incCount(1);
}
请参见的源代码差异不在于输出流,而在于您使用的写入方法:它们不同。在第一个示例中使用
dp.write()
,在第二个示例中使用dp.writeChar()
在第二个示例中,将dp.writeChar()
更改为dp.write()
,结果将与预期一致
java.io.DataOutputStream.writeChar(int)
方法实现如下:
public final void writeChar(int v) throws IOException {
out.write((v >>> 8) & 0xFF);
out.write((v >>> 0) & 0xFF);
incCount(2);
}
请参阅的源代码
而java.io.DataOutputStream.write(int)
有以下实现:
public synchronized void write(int b) throws IOException {
out.write(b);
incCount(1);
}
请参阅writeChar的源代码以UTF-16编码方式将字符写入2字节值。如果是“J”,则为
004a
。要正确显示,您需要使用正确的编码writeChar将字符作为UTF-16编码中的2字节值写入。如果是“J”,则为004a
。要正确显示,您需要使用正确的编码writeChar将字符作为UTF-16编码中的2字节值写入。如果是“J”,则为004a
。要正确显示,您需要使用正确的编码writeChar将字符作为UTF-16编码中的2字节值写入。如果是“J”,则为004a
。要正确显示,您需要使用正确的编码
File newFile = new File("C:\\Jeevantest.as");
FileOutputStream outFp = new FileOutputStream(newFile);
DataOutputStream dp = new DataOutputStream(outFp);
dp.writeChars("J");
outFp.close();
dp.close();
- 首先,writeChar接受int参数,因此,如果需要传递字符串,则需要使用
writeChars(string arg)
- 关闭dp流
- 首先,writeChar接受int参数,因此,如果需要传递字符串,则需要使用
writeChars(string arg)
- 关闭dp流
- 首先,writeChar接受int参数,因此,如果需要传递字符串,则需要使用
writeChars(string arg)
- 关闭dp流
- 首先,writeChar接受int参数,因此,如果需要传递字符串,则需要使用
writeChars(string arg)
- 关闭dp流
数据输出流
用于以便携方式存储原语。看看一个字符是如何写入流的
public final void writeChar(int v) throws IOException {
out.write((v >>> 8) & 0xFF);
out.write((v >>> 0) & 0xFF);
incCount(2);
}
字符是使用2个字节写入的,首先是高字节。因为hi字节是0(在您的例子中是'J'=>004A),所以结果就是您在文件中看到的结果。
DataOutputStream
用于以便携方式存储原语。看看一个字符是如何写入流的
public final void writeChar(int v) throws IOException {
out.write((v >>> 8) & 0xFF);
out.write((v >>> 0) & 0xFF);
incCount(2);
}
字符是使用2个字节写入的,首先是高字节。因为hi字节是0(在您的例子中是'J'=>004A),所以结果就是您在文件中看到的结果。
DataOutputStream
用于以便携方式存储原语。看看一个字符是如何写入流的
public final void writeChar(int v) throws IOException {
out.write((v >>> 8) & 0xFF);
out.write((v >>> 0) & 0xFF);
incCount(2);
}
字符是使用2个字节写入的,首先是高字节。因为hi字节是0(在您的例子中是'J'=>004A),所以结果就是您在文件中看到的结果。
DataOutputStream
用于以便携方式存储原语。看看一个字符是如何写入流的
public final void writeChar(int v) throws IOException {
out.write((v >>> 8) & 0xFF);
out.write((v >>> 0) & 0xFF);
incCount(2);
}
字符是使用2个字节写入的,首先是高字节。因为hi字节是0(在您的例子中是'J'=>004A),所以结果就是您在文件中看到的结果。流由二进制数据组成,没有任何内容来指示单个值的类型,或者它们在流中的起始位置。 因此,只能使用DataInputStream读取它。有关更多信息,请参阅本oracle官方教程:
流由二进制数据组成,没有任何内容指示单个值的类型或它们在流中的起始位置。 因此,只能使用DataInputStream读取它。有关更多信息,请参阅本oracle官方教程:
流由二进制数据组成,没有任何内容指示单个值的类型或它们在流中的起始位置。 因此,它只能使用Da读取