教えて下さい。
あるファイルの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.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]);
}
}
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
お探しの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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
大量のデータを読み込んで表示する速度を改善したい
C言語・C++・C#
-
【VB】タブ切り替え時のイベント
Visual Basic(VBA)
-
Visual Basic.NETの処理速度は6.0より遅い?
Visual Basic(VBA)
-
-
4
ファイルへの書込み処理が異常に遅い
C言語・C++・C#
-
5
文字列の後ろから必要分だけ削除したい。
Visual Basic(VBA)
-
6
VBでファイルが開かれているかどうかを確認したい
Visual Basic(VBA)
-
7
VB.NETでファイル名順にファイルを読む方法
Visual Basic(VBA)
-
8
vb.netからエクセル関数書き込み
Visual Basic(VBA)
-
9
VB.net XMLの作成方法 Iniの代替
Visual Basic(VBA)
-
10
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
11
VB.netでメソッドからコントロールを取得
Visual Basic(VBA)
-
12
【VB.NET】App.configにファイルパスを設定して読み込みたい
Microsoft ASP
-
13
ftpサーバー 接続できない
Windows 10
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBAが徐々に遅くなる
-
ATTファイルってどうやって開け...
-
C言語でテキストファイルをバイ...
-
フォーム無しでアプリを作成す...
-
既存のテキストファイルを開く方法
-
StreamReaderで読み込んだファ...
-
[VB.NET] 処理の高速化を行いた...
-
テキストファイル固定長データ...
-
バイナリデータの中からMidのよ...
-
パイソンでのテキストデータの...
-
バイナリファイルとバイナリ文...
-
CSVファイルの時刻の形式について
-
accessでクエリをExcelにエクス...
-
HTMLテキストリンクでExcelファ...
-
ACCESS2002(or2003)の日付表示...
-
includeで別サイトを読み込む
-
社員情報
-
VBAでフォルダ内の全てのcsv...
-
ファイナルカットで編集した動...
-
VB6.0でExcel,PDF,Word出力方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ATTファイルってどうやって開け...
-
Excel VBAが徐々に遅くなる
-
テキストファイルの一部分を抽...
-
既存のテキストファイルを開く方法
-
テキストファイル(英語&日本...
-
VB(VBA)で、バイナリデータを使...
-
パイソンでのテキストデータの...
-
VBA。開いているテキストファイ...
-
テキストファイルの特定行の削...
-
テキストファイル内容の、16進...
-
StreamReaderで読み込んだファ...
-
テキストファイル固定長データ...
-
ファイル変換
-
STM32 Nucleo-F446REでデータを...
-
テキストファイルで一番使われ...
-
エクセルVBAでメールの自動作成...
-
テキストファイルのログをExcel...
-
UTF-8とASCIIコードにおける互...
-
フォーム無しでアプリを作成す...
-
テキストファイル内の文字の有...
おすすめ情報