Base64 - кодировать PDF в C#?
Есть способ сделать это по c#-language частям, так что вам не придется c# сжигать сразу тонны памяти.
.Net visual-c# включает в себя кодировщик, который .cs-file может выполнять фрагменты, но base64 это довольно странное место. Они csharp помещают его в пространство c#.net имен System.Security.Cryptography.
Я c#.net протестировал приведенный c-sharp ниже пример кода и получаю visual-c# идентичный результат, используя c#.net мой метод или метод Эндрю, описанный encoding выше.
Вот как это работает: вы encoding запускаете класс под названием encodings CryptoStream. Это своего encodings рода адаптер, который подключается csharp к другому потоку. Вы подключаете c-sharp класс под названием CryptoTransform encoding к CryptoStream (который, в encodings свою очередь, присоединяется c# к вашему файлу / памяти / сетевому encoding потоку), и он выполняет преобразование c#-language данных, пока они читаются visual-c# или записываются в поток.
Обычно encodings преобразованием является c#-language шифрование / дешифрование, но c#-language .net также включает преобразования c# ToBase64 и FromBase64, поэтому csharp мы не будем шифровать, а encodings только кодируем.
Вот код. Я encoding включил (возможно, плохо encoding названный) реализацию предложения .cs-file Эндрю, чтобы вы могли сравнить encodings результат.
class Base64Encoder
{
public void Encode(string inFileName, string outFileName)
{
System.Security.Cryptography.ICryptoTransform transform = new System.Security.Cryptography.ToBase64Transform();
using(System.IO.FileStream inFile = System.IO.File.OpenRead(inFileName),
outFile = System.IO.File.Create(outFileName))
using (System.Security.Cryptography.CryptoStream cryptStream = new System.Security.Cryptography.CryptoStream(outFile, transform, System.Security.Cryptography.CryptoStreamMode.Write))
{
// I'm going to use a 4k buffer, tune this as needed
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inFile.Read(buffer, 0, buffer.Length)) > 0)
cryptStream.Write(buffer, 0, bytesRead);
cryptStream.FlushFinalBlock();
}
}
public void Decode(string inFileName, string outFileName)
{
System.Security.Cryptography.ICryptoTransform transform = new System.Security.Cryptography.FromBase64Transform();
using (System.IO.FileStream inFile = System.IO.File.OpenRead(inFileName),
outFile = System.IO.File.Create(outFileName))
using (System.Security.Cryptography.CryptoStream cryptStream = new System.Security.Cryptography.CryptoStream(inFile, transform, System.Security.Cryptography.CryptoStreamMode.Read))
{
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = cryptStream.Read(buffer, 0, buffer.Length)) > 0)
outFile.Write(buffer, 0, bytesRead);
outFile.Flush();
}
}
// this version of Encode pulls everything into memory at once
// you can compare the output of my Encode method above to the output of this one
// the output should be identical, but the crytostream version
// will use way less memory on a large file than this version.
public void MemoryEncode(string inFileName, string outFileName)
{
byte[] bytes = System.IO.File.ReadAllBytes(inFileName);
System.IO.File.WriteAllText(outFileName, System.Convert.ToBase64String(bytes));
}
}
Я также играюсь .cs-file с тем, где я прикрепляю CryptoStream. В c#-language методе Encode я прикрепляю c-sharp его к потоку вывода (записи), поэтому, когда .cs-file я создаю экземпляр CryptoStream, я .cs-file использую его метод Write().
Когда visual-c# я читаю, я присоединяю его c#.net к потоку ввода (чтения), поэтому encoding я использую метод чтения .cs-file в CryptoStream. На самом c# деле не имеет значения, к c#.net какому потоку я его прикрепляю. Мне visual-c# просто нужно передать соответствующий c#-language член перечисления Read или csharp Write конструктору CryptoStream.
c#
encoding
base64
Base64 - кодировать PDF в C#?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.