バイナリファイル出力とテキストファイル出力の比較
バイナリ・ファイル出力とテキスト・ファイル出力のファイル・サイズの比較を行うために以下のVisual C++/CLRプログラムを作成した。
// CheckBinaryFSize.cpp : メインプロジェクトファイルです。
#include "stdafx.h"
using namespace System;
using namespace System::IO; // StreamWriter,
StreamReader, FileStream, BinaryWriter, BinaryReader用
int main(array<System::String ^> ^args)
{
//
// 出力データの設定
//
const int n = 1000;
double x[n];
for (int i = 0; i
< n; i++)
x[i]
= 1.0 / (i + 1.0);
//
// テキストファイル出力
//
Console::Write("FileName1 = ");
String
^ flnm1 = Console::ReadLine();
StreamWriter
^ fout = gcnew StreamWriter( flnm1, false, System::Text::Encoding::GetEncoding("shift-jis") );
for (int i = 0; i
< n; i++)
fout->WriteLine(
x[i].ToString() );
fout->Close();
//
// バイナリファイル出力
//
Console::Write("File Name2 = ");
String
^flnm2 = Console::ReadLine();
FileStream
^ fs = gcnew FileStream( flnm2,
FileMode::Create );
BinaryWriter
^ bout = gcnew BinaryWriter( fs );
for (int i = 0; i
< n; i++)
bout->Write(x[i]);
bout->Close();
//
// テキストファイル入力
//
double y1[n];
StreamReader
^ fin = gcnew StreamReader( flnm1,
System::Text::Encoding::GetEncoding("shift-jis")
);
for (int i = 0; i
< n; i++)
y1[i]
= double::Parse(fin->ReadLine());
fin->Close();
for (int i = 0; i <
n; i++)
if ((i < 20) || (i > 980))
Console::WriteLine(i.ToString()
+ ":
" + y1[i].ToString());
//
// バイナリファイル入力
//
double y2[n];
fs
= gcnew FileStream( flnm2, FileMode::Open );
BinaryReader
^ bin = gcnew BinaryReader( fs );
for (int i = 0; i
< n; i++)
y2[i]
= bin->ReadDouble( );
bin->Close();
for (int i = 0; i
< n; i++)
if ((i < 20) || (i > 980))
Console::WriteLine(i.ToString()
+ ":
" + y2[i].ToString());
Console::WriteLine("Press down Enter key to quit.");
Console::ReadLine();
return 0;
}
バイナリ・ファイル入出力についてはウェブサイト<バイナリ・ファイル入出力>で、テキスト・ファイル入出力については<岡本安晴「大学生のための心理学VC++プログラミング入門」勁草書房、pp. 200-203>で説明している。
上のプログラムを実行したときのコンソール画面の出力を以下に示す。
===================================
FileName1 = f1
File Name2 = f2
0: 1
1: 0.5
2: 0.333333333333333
3: 0.25
4: 0.2
5: 0.166666666666667
6: 0.142857142857143
7: 0.125
8: 0.111111111111111
9: 0.1
10: 0.0909090909090909
11: 0.0833333333333333
12: 0.0769230769230769
13: 0.0714285714285714
14: 0.0666666666666667
15: 0.0625
16: 0.0588235294117647
17: 0.0555555555555556
18: 0.0526315789473684
19: 0.05
981: 0.0010183299389002
982: 0.00101729399796541
983: 0.00101626016260163
984: 0.00101522842639594
985: 0.00101419878296146
986: 0.00101317122593718
987: 0.00101214574898785
988: 0.00101112234580384
989: 0.00101010101010101
990: 0.00100908173562059
991: 0.00100806451612903
992: 0.00100704934541793
993: 0.00100603621730382
994: 0.00100502512562814
995: 0.00100401606425703
996: 0.00100300902708124
997: 0.00100200400801603
998: 0.001001001001001
999: 0.001
0: 1
1: 0.5
2: 0.333333333333333
3: 0.25
4: 0.2
5: 0.166666666666667
6: 0.142857142857143
7: 0.125
8: 0.111111111111111
9: 0.1
10: 0.0909090909090909
11: 0.0833333333333333
12: 0.0769230769230769
13: 0.0714285714285714
14: 0.0666666666666667
15: 0.0625
16: 0.0588235294117647
17: 0.0555555555555556
18: 0.0526315789473684
19: 0.05
981: 0.0010183299389002
982: 0.00101729399796541
983: 0.00101626016260163
984: 0.00101522842639594
985: 0.00101419878296146
986: 0.00101317122593718
987: 0.00101214574898785
988: 0.00101112234580384
989: 0.00101010101010101
990: 0.00100908173562059
991: 0.00100806451612903
992: 0.00100704934541793
993: 0.00100603621730382
994: 0.00100502512562814
995: 0.00100401606425703
996: 0.00100300902708124
997: 0.00100200400801603
998: 0.001001001001001
999: 0.001
Press down Enter key to quit.
=============================
上のプログラムの実行で作成されたテキストファイルf1およびバイナリファイルf2のサイズは図1に示す通りである。
図1
バイナリ・ファイルf2の方が小さいことがわかる。
プログラム・ソース・ファイルなどをまとめた圧縮ファイルCheckBinaryFSize.zipはファイル名CheckBinaryFSize.zipをクリックしてダウンロードすることができる。ダウンロードした圧縮ファイルはマウスの右ボタンでクリックして表示されるメニュから「解凍」あるいは「展開」を選んで解凍することができる。解凍したプログラムはVisual C++2008で開いて、実行する事が出来る。