
教えて下さい。
あるファイルの1バイトづつローテートを行いファイルの書き出しを行っています。(ビット演算による暗号化)
しかし以下の処理の場合、サイズの大きいファイルを扱った場合に多くの処理時間がかかってしまいます。
もっと処理を高速化する事は可能でしょうか?
-----------------------------------------------------------------
' 読み込みファイル
Private Const READ_FILE As String = "c:\temp\date.Text"
' 書き込みファイル
Private WRIT_FILE As String = "c:\temp\date.dat"
' オブジェクト作成
Dim br As New System.IO.FileStream(READ_FILE, IO.FileMode.Open, IO.FileAccess.Read)
Dim bw As New System.IO.StreamWriter(WRIT_FILE, False, System.Text.Encoding.GetEncoding("iso-8859-1"))
Dim m As Integer = 3 ' 3ビット左回転
Dim n As Integer
' 1バイトづつ処理
For I As Integer = 0 To CType(br.Length, Integer) - 1
' 16進数を10進数へ変換
n = ("&h" & String.Format("{0:X2}", br.ReadByte))
' mビット左へローテート処理を行いファイルへ書き込み
bw.Write(ChrW("&h" & Hex(Int((n / 2 ^ (8 - m)) + (n * 2 ^ m And 255)))))
Next
' 閉じる
bw.Close()
br.Close()
-----------------------------------------------------------------
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
> ' 16進数を10進数へ変換
> n = ("&h" & String.Format("{0:X2}", br.ReadByte))
コメントとやっていることが合っていません。
Byte型を &h75 の様な文字列に変換し、
その後暗黙の型変換でInteger型に変換するという
(無駄な)処理がここでは行われています。
Byte型は数値なのでそのまま演算処理すれば良いです。
素直にこんな感じに書いてみては?
===================================
' インデントに全角空白を使っています。要削除。
Imports System
Imports System.IO
Class BRotate
Shared Sub main(ByVal args As String())
Dim srcName As String = args(0) ' コピー元のファイル名
Dim destName As String = args(1) ' コピー先のファイル名
Dim BUFSIZE As Integer = 2048 ' 1度に処理するサイズ
Dim buf(BUFSIZE) As Byte ' 読み込み用バッファ
Dim m As Integer = 3 ' 3ビット左回転
Dim readSize As Integer ' Readメソッドで読み込んだバイト数
Using src As New FileStream( _
srcName, FileMode.Open, FileAccess.Read)
Using dest As New FileStream( _
destName, FileMode.Create, FileAccess.Write)
While True
readSize = src.Read(buf, 0, BUFSIZE) ' 読み込み
If readSize = 0 Then
Exit While ' 完了
End If
For i As Integer = 0 To readSize - 1
buf(i) = (buf(i) << m) Or (buf(i) >> (8-m)) ' ビット回転
Next
dest.Write(buf, 0, readSize) ' 書き込み
End While
End Using
End Using
End Sub
End Class
' 参考にしたページ:以下のページのファイルコピープログラムをベースにした
' バイナリ・ファイルを読み書きするには?[C#、VB] - @IT
' http://www.atmarkit.co.jp/fdotnet/dotnettips/669 …
ありがとうございました!
信じられないくらい高速化する事が出来ました!
(一瞬で処理が終わる!)
まじありがとおおおおおおおおおおw
No.2
- 回答日時:
C#しか書けないけど、こんな感じ
//変換表を作成
byte[] convList = new byte[256];
for (byte i = 0; i <= 255; i++) {
convList[i] = (byte)((i << 3) & 255 | (i >> 5));
}
using (FileStream reader = new FileStream(~))
using (FileStream writer = new FileStream(~)) {
while (true) {
int c = reader.ReadByte();
if (c == -1)
break;
writer.WriteByte(convList[c]);
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Excel(エクセル) EXCELのグラフを画像(JPG形式)で保存、通常実行がうまく行かない。ステップインはうまく行く 3 2022/08/30 12:06
- Excel(エクセル) エクセル2019でPDFファイル名に枝番号をつけたい。 アクティブワークシートを印刷した後の処理とし 4 2023/06/06 21:00
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストファイル固定長データ...
-
ATTファイルってどうやって開け...
-
テキストファイルの一部分を抽...
-
掲示板はMySQLとテキストファイ...
-
バイナリファイルの区別
-
ボタン
-
C言語でテキストファイルをバイ...
-
VBSでテキストファイルの2行目...
-
テキストファイル内の文字の有...
-
ストリームについて。
-
Excel VBAが徐々に遅くなる
-
WORDのVBAで差し込み印刷時、デ...
-
エクセルが裏で動いたままなん...
-
CSVファイルの時刻の形式について
-
accessでクエリをExcelにエクス...
-
【Excel VBA】取り込んだファイ...
-
VB2008 iniファイルの全セクシ...
-
コマンドプロンプトのテキスト...
-
0バイトのテキストファイル
-
ファイル内容を比較する方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ATTファイルってどうやって開け...
-
テキストファイルの一部分を抽...
-
テキストファイル固定長データ...
-
VB(VBA)で、バイナリデータを使...
-
バイナリデータの中からMidのよ...
-
WORDのVBAで差し込み印刷時、デ...
-
Excel VBAが徐々に遅くなる
-
既存のテキストファイルを開く方法
-
C言語のソースからコメントを抜...
-
VBSでテキストファイルの2行目...
-
エクセルVBAでメールの自動作成...
-
wav ファイルから音声を数値デ...
-
ファイル変換
-
テキストファイル(英語&日本...
-
[VB.NET] 処理の高速化を行いた...
-
テキストファイルをSQLServerデ...
-
VBA。開いているテキストファイ...
-
テキストファイルの特定行の削...
-
VBscriptでWebサイトから取得し...
-
テキストファイルを読んで、Exc...
おすすめ情報