Java 基于字节和基于字符的输出流
我必须制作一个应用程序,生成10000个随机值为0到100000的整数,并将其写入本地系统上的文件。我必须用两种不同的方法来做——字节流和字符流,并比较生成文件的大小。这些文件带有非常奇怪的字符,大小相同。应该是这样吗 基于字节的流:Java 基于字节和基于字符的输出流,java,file,io,Java,File,Io,我必须制作一个应用程序,生成10000个随机值为0到100000的整数,并将其写入本地系统上的文件。我必须用两种不同的方法来做——字节流和字符流,并比较生成文件的大小。这些文件带有非常奇怪的字符,大小相同。应该是这样吗 基于字节的流: Random rd = new Random(); File outFile = new File( "Byte-based Stream.txt" ); FileOutputStream fos = new FileOutputStrea
Random rd = new Random();
File outFile = new File( "Byte-based Stream.txt" );
FileOutputStream fos = new FileOutputStream(outFile);
for(int i=0;i<10000;i++){
fos.write(rd.nextInt(100001));
}
fos.flush();
fos.close();
Random rd = new Random();
File outFile = new File( "Character-based Stream.txt" );
FileWriter fos = new FileWriter(outFile);
for(int i=0;i<10000;i++){
fos.write(rd.nextInt(100001));
}
fos.flush();
fos.close();
Random rd=new Random();
File outFile=新文件(“基于字节的Stream.txt”);
FileOutputStream fos=新的FileOutputStream(输出文件);
如您在问题FileWriter
中所述,for(int i=0;i写入字符,而FileOutputStream
写入二进制文件(字节流)
计算机中的所有东西实际上都是位,但编码除外。FileWriter
将字符作为人类可读的编码写入,而FileOutputStream
写入字节流
大小是相同的,因为默认编码每个字符应该有32位,而java中的integer每个数字也应该有32位
另请参见
文件输出流。write
只写一个输出
类似地,FileWriter.write
只写一个输出
即使它们都使用int
,它们也不会写出int
。相反,您必须使用
int rn = rd.nextInt( 1000001 );
byte[ ] bytes = new byte[ ] {
( byte ) ( ( rn >>> 0 ) & 0xFF ),
( byte ) ( ( rn >>> 8 ) & 0xFF ),
( byte ) ( ( rn >>> 16 ) & 0xFF ),
( byte ) ( ( rn >>> 24 ) & 0xFF )
};
fileos.write( bytes );
对于FileOutputStream
和
fos.write( Integer.toString( rd.nextInt( 100001 ) ) );
对于FileWriter
而言,FileWriter是一个使用默认平台编码(=不可移植)的旧实用程序类。您似乎使用单字节编码,因此大小相同
以下
PrintWriter fos = new PrintWriter(outFile, "UTF-16LE");
应该是原来的两倍
顺便说一句,字节版本使用低阶字节(&0xFF
)。不,首先,我认为应该在基于字符的版本中看到纯文本中的数字