Base64 кодируют PDF в C#?

Попробуйте следующее:

ImageView imageview = (ImageView)findViewById(R.id.your_imageview_id);
Bitmap bmp = BitmapFactory.decodeFile(new java.net.URL(your_url).openStream());  
imageview.setImageBitmap(bmp);

Вы также можете попробовать: Android-Universal-Image-Loader для эффективной загрузки изображения с URL

30
задан Andrew Rollings 28 January 2009 в 02:12
поделиться

2 ответа

Используйте File.ReadAllBytes , чтобы загрузить файл PDF и затем закодировать массив байтов нормальным использованием Convert.ToBase64String(bytes) .

46
ответ дан 27 November 2019 в 23:17
поделиться

Существует способ, которым можно сделать это в блоках так, чтобы Вы не записывали тонну памяти внезапно.

.NET включает кодер, который может сделать разделение на блоки, но это натурально из странного места. Они помещают его в Систему. Безопасность. Пространство имен криптографии.

Я протестировал пример кода ниже, и я получаю идентичный вывод с помощью или своего метода или метода Andrew выше.

Вот то, как это работает: Вы разжигаете класс, названный CryptoStream. Это - вид адаптера, который включает другой поток. Вы включаете класс под названием CryptoTransform в CryptoStream (который в свою очередь присоединен к Вашему потоку файла/памяти/сети), и он выполняет преобразования данных на данных, в то время как он читается из или пишется в поток.

Обычно, преобразование является шифрованием/дешифрованием, но .NET включает ToBase64 и преобразования FromBase64 также, таким образом, мы не будем шифровать, просто кодируя.

Вот код. Я включал (возможно, плохо названный) реализация предложения Andrew так, чтобы можно было сравнить вывод.


    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));
        }
    }

Я также играю вокруг с тем, где я присоединяю CryptoStream. В Закодировать методе я присоединяю его к выводу (запись) поток, поэтому когда я инстанцирую CryptoStream, я использую его Запись () метод.

Когда я читал, я присоединяю его к входу (чтение) поток, таким образом, я использую метод чтения на CryptoStream. Это действительно не имеет значения, к какому потоку я присоединяю его. Я просто должен передать соответствующего участника перечисления Read или Write конструктору CryptoStream.

35
ответ дан 27 November 2019 в 23:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: