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读取