java int轉bitmap_Java Base64位編碼與String字符串的相互轉換,Base64與Bitmap的相互轉換實例代碼...

首先是網上大神給的類

package com.duanlian.daimengmusic.utils;

public final class Base64Util {

private static final int BASELENGTH = 128;

private static final int LOOKUPLENGTH = 64;

private static final int TWENTYFOURBITGROUP = 24;

private static final int EIGHTBIT = 8;

private static final int SIXTEENBIT = 16;

private static final int FOURBYTE = 4;

private static final int SIGN = -128;

private static char PAD = '=';

private static byte[] base64Alphabet = new byte[BASELENGTH];

private static char[] lookUpBase64Alphabet = new char[LOOKUPLENGTH];

static {

for (int i = 0; i < BASELENGTH; ++i) {

base64Alphabet[i] = -1;

}

for (int i = 'Z'; i >= 'A'; i--) {

base64Alphabet[i] = (byte) (i - 'A');

}

for (int i = 'z'; i >= 'a'; i--) {

base64Alphabet[i] = (byte) (i - 'a' + 26);

}

for (int i = '9'; i >= '0'; i--) {

base64Alphabet[i] = (byte) (i - '0' + 52);

}

base64Alphabet['+'] = 62;

base64Alphabet['/'] = 63;

for (int i = 0; i <= 25; i++) {

lookUpBase64Alphabet[i] = (char) ('A' + i);

}

for (int i = 26, j = 0; i <= 51; i++, j++) {

lookUpBase64Alphabet[i] = (char) ('a' + j);

}

for (int i = 52, j = 0; i <= 61; i++, j++) {

lookUpBase64Alphabet[i] = (char) ('0' + j);

}

lookUpBase64Alphabet[62] = (char) '+';

lookUpBase64Alphabet[63] = (char) '/';

}

private static boolean isWhiteSpace(char octect) {

return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9);

}

private static boolean isPad(char octect) {

return (octect == PAD);

}

private static boolean isData(char octect) {

return (octect < BASELENGTH && base64Alphabet[octect] != -1);

}

/**

把64位byte數組轉換成String

*/

public static String encode(byte[] binaryData) {

if (binaryData == null) {

return null;

}

int lengthDataBits = binaryData.length * EIGHTBIT;

if (lengthDataBits == 0) {

return "";

}

int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP;

int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP;

int numberQuartet = fewerThan24bits != 0 ? numberTriplets + 1

: numberTriplets;

char encodedData[] = null;

encodedData = new char[numberQuartet * 4];

byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0;

int encodedIndex = 0;

int dataIndex = 0;

for (int i = 0; i < numberTriplets; i++) {

b1 = binaryData[dataIndex++];

b2 = binaryData[dataIndex++];

b3 = binaryData[dataIndex++];

l = (byte) (b2 & 0x0f);

k = (byte) (b1 & 0x03);

byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)

: (byte) ((b1) >> 2 ^ 0xc0);

byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4)

: (byte) ((b2) >> 4 ^ 0xf0);

byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6)

: (byte) ((b3) >> 6 ^ 0xfc);

encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];

encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)];

encodedData[encodedIndex++] = lookUpBase64Alphabet[(l << 2) | val3];

encodedData[encodedIndex++] = lookUpBase64Alphabet[b3 & 0x3f];

}

// form integral number of 6-bit groups

if (fewerThan24bits == EIGHTBIT) {

b1 = binaryData[dataIndex];

k = (byte) (b1 & 0x03);

byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)

: (byte) ((b1) >> 2 ^ 0xc0);

encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];

encodedData[encodedIndex++] = lookUpBase64Alphabet[k << 4];

encodedData[encodedIndex++] = PAD;

encodedData[encodedIndex++] = PAD;

} else if (fewerThan24bits == SIXTEENBIT) {

b1 = binaryData[dataIndex];

b2 = binaryData[dataIndex + 1];

l = (byte) (b2 & 0x0f);

k = (byte) (b1 & 0x03);

byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2)

: (byte) ((b1) >> 2 ^ 0xc0);

byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4)

: (byte) ((b2) >> 4 ^ 0xf0);

encodedData[encodedIndex++] = lookUpBase64Alphabet[val1];

encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)];

encodedData[encodedIndex++] = lookUpBase64Alphabet[l << 2];

encodedData[encodedIndex++] = PAD;

}

return new String(encodedData);

}

/**

* 把Base64位編碼轉換成byte數組

*/

public static byte[] decode(String encoded) {

if (encoded == null) {

return null;

}

char[] base64Data = encoded.toCharArray();

// remove white spaces

int len = removeWhiteSpace(base64Data);

if (len % FOURBYTE != 0) {

return null;// should be divisible by four

}

int numberQuadruple = (len / FOURBYTE);

if (numberQuadruple == 0) {

return new byte[0];

}

byte decodedData[] = null;

byte b1 = 0, b2 = 0, b3 = 0, b4 = 0;

char d1 = 0, d2 = 0, d3 = 0, d4 = 0;

int i = 0;

int encodedIndex = 0;

int dataIndex = 0;

decodedData = new byte[(numberQuadruple) * 3];

for (; i < numberQuadruple - 1; i++) {

if (!isData((d1 = base64Data[dataIndex++]))

|| !isData((d2 = base64Data[dataIndex++]))

|| !isData((d3 = base64Data[dataIndex++]))

|| !isData((d4 = base64Data[dataIndex++]))) {

return null;

}// if found "no data" just return null

b1 = base64Alphabet[d1];

b2 = base64Alphabet[d2];

b3 = base64Alphabet[d3];

b4 = base64Alphabet[d4];

decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);

decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));

decodedData[encodedIndex++] = (byte) (b3 << 6 | b4);

}

if (!isData((d1 = base64Data[dataIndex++]))

|| !isData((d2 = base64Data[dataIndex++]))) {

return null;// if found "no data" just return null

}

b1 = base64Alphabet[d1];

b2 = base64Alphabet[d2];

d3 = base64Data[dataIndex++];

d4 = base64Data[dataIndex++];

if (!isData((d3)) || !isData((d4))) {// Check if they are PAD characters

if (isPad(d3) && isPad(d4)) {

if ((b2 & 0xf) != 0)// last 4 bits should be zero

{

return null;

}

byte[] tmp = new byte[i * 3 + 1];

System.arraycopy(decodedData, 0, tmp, 0, i * 3);

tmp[encodedIndex] = (byte) (b1 << 2 | b2 >> 4);

return tmp;

} else if (!isPad(d3) && isPad(d4)) {

b3 = base64Alphabet[d3];

if ((b3 & 0x3) != 0)// last 2 bits should be zero

{

return null;

}

byte[] tmp = new byte[i * 3 + 2];

System.arraycopy(decodedData, 0, tmp, 0, i * 3);

tmp[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);

tmp[encodedIndex] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));

return tmp;

} else {

return null;

}

} else { // No PAD e.g 3cQl

b3 = base64Alphabet[d3];

b4 = base64Alphabet[d4];

decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4);

decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf));

decodedData[encodedIndex++] = (byte) (b3 << 6 | b4);

}

return decodedData;

}

/**

* remove WhiteSpace from MIME containing encoded Base64Util data.

*

* @param data

* the byte array of base64 data (with WS)

* @return the new length

*/

private static int removeWhiteSpace(char[] data) {

if (data == null) {

return 0;

}

// count characters that's not whitespace

int newSize = 0;

int len = data.length;

for (int i = 0; i < len; i++) {

if (!isWhiteSpace(data[i])) {

data[newSize++] = data[i];

}

}

return newSize;

}

}

然后是我經過2次封裝的類,注釋很清楚,拿過去直接用就行

package com.duanlian.daimengmusic.utils;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.util.Base64;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

/**

* 轉換編碼

*/

public class Base64Object {

/**

* 把base64的String碼轉換成正常顯示的字符串

*/

public static String base64ToString(String base64) {

byte[] decode = Base64Util.decode(base64);

String s = new String(decode);

return s;

}

/**

* 把String的轉換成base64碼

*/

public static String stringToBase64(String ss) {

byte[] bytes = ss.getBytes();

String encode = Base64Util.encode(bytes);

return encode;

}

/**

* bitmap轉為base64

* @param bitmap

* @return

*/

public static String bitmapToBase641(Bitmap bitmap) {

String result = null;

ByteArrayOutputStream baos = null;

try {

if (bitmap != null) {

baos = new ByteArrayOutputStream();

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);

baos.flush();

baos.close();

byte[] bitmapBytes = baos.toByteArray();

result = Base64.encodeToString(bitmapBytes, Base64.DEFAULT);

}

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

if (baos != null) {

baos.flush();

baos.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

return result;

}

/**

* base64轉為bitmap

* @param base64Data

* @return

*/

public static Bitmap base64ToBitmap(String base64Data) {

byte[] bytes = Base64.decode(base64Data, Base64.DEFAULT);

return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

}

}

以上所述是小編給大家介紹的Java Base64位編碼與String字符串的相互轉換,Base64與Bitmap的相互轉換實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532350.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532350.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532350.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux查看java虛擬機內存_深入理解java虛擬機(linux與jvm內存關系)

本文轉載自美團技術團隊發表的同名文章https://tech.meituan.com/linux-jvm-memory.html一, linux與進程內存模型要理解jvm最重要的一點是要知道jvm只是linux的一個進程,把jvm的視野放大,就能很好的理解JVM細分的一些概念下圖給出了硬件系統進程三個層面內存之間的關系.從硬件上…

java 循環stringbuffer_java常用類-----StringBuilder和StringBuffer的用法

一、可變字符常用方法package cn.zxg.PackgeUse;/*** 測試StringBuilder,StringBuffer可變字符序列常用方法*/public class TestStringBuilder2 {public static void main(String[] args) {StringBuilder sbnew StringBuilder();for(int i0;i<26;i){char temp(char)(ai);sb.…

java function void_Java8中你可能不知道的一些地方之函數式接口實戰

什么時候可以使用 Lambda&#xff1f;通常 Lambda 表達式是用在函數式接口上使用的。從 Java8 開始引入了函數式接口&#xff0c;其說明比較簡單&#xff1a;函數式接口(Functional Interface)就是一個有且僅有一個抽象方法&#xff0c;但是可以有多個非抽象方法的接口。 java8…

java jvm內存地址_JVM--Java內存區域

Java虛擬機在執行Java程序的過程中會把它所管理的內存劃分為若干個不同的數據區域&#xff0c;如圖&#xff1a;1.程序計數器可以看作是當前線程所執行的字節碼的行號指示器&#xff0c;通俗的講就是用來指示執行哪條指令的。為了線程切換后能恢復到正確的執行位置Java多線程是…

java情人節_情人節寫給女朋友Java Swing代碼程序

馬上又要到情人節了&#xff0c;再不解風情的人也得向女友表示表示。作為一個程序員&#xff0c;示愛的時候自然也要用我們自己的方式。這里給大家上傳一段我在今年情人節的時候寫給女朋友的一段簡單的Java Swing代碼&#xff0c;主要定義了一個對話框&#xff0c;讓女友選擇是…

java web filter鏈_filter過濾鏈:Filter鏈是如何構建的?

在一個Web應用程序中可以注冊多個Filter程序&#xff0c;每個Filter程序都可以針對某一個URL進行攔截。如果多個Filter程序都對同一個URL進行攔截&#xff0c;那么這些Filter就會組成一個Filter鏈(也叫過濾器鏈)。Filter鏈用FilterChain對象來表示&#xff0c;FilterChain對象中…

java web 應用技術與案例教程_《Java Web應用開發技術與案例教程》怎么樣_目錄_pdf在線閱讀 - 課課家教育...

出版說明前言第1章 java Web應用開發技術概述1.1 Java Web應用開發技術簡介1.1.1 Java Web應用1.1.2 Java Web應用開發技術1.2 Java Web開發環境及開發工具1.2.1 JDK的下載與安裝1.2.2 Tomcat服務器的安裝和配置1.2.3 MyEclipse集成開發工具的安裝與操作1.3 Java Web應用程序的…

java環境變量自動設置_自動設置Java環境變量

echo offSETLOCALENABLEDELAYEDEXPANSIONfor /f "tokens2* delims " %%i in(reg query "HKLM\Software\JavaSoft\Java Development Kit" /s ^|find /I"JavaHome") do (echo 找到目錄 %%jset /p isOK該目錄是不是JDK^(JavaDevelopment Kit^)的安裝…

mysql運行狀態監控研究內容_如何監控mysql主從的運行狀態shell腳本實例介紹

如何監控mysql主從的運行狀態shell腳本實例介紹。#!/bin/bash#define mysql variablemysql_user”root”mysql_pass”123456″email_addr”slavecentos.bz”mysql_statusnetstat -nl | awk ‘NR>2{if ($4 ~ /.*:3306/) {print “Yes”;exit 0}}’if [ "$mysql_status&q…

java 100% cpu_Java服務,CPU 100%問題如何快速定位?

Java服務&#xff0c;有時候會遇到CPU 100%的問題&#xff0c;對于這樣的問題&#xff0c;我們如何快速定位并解決呢&#xff1f;一般會有如下三個步驟&#xff1a;1、找到最耗CPU的進程2、找到這個進程中最耗CPU的線程3、查看堆棧信息&#xff0c;定位線程的什么操作消耗了大量…

java 泛型 加_Java泛型并將數字加在一起

為了一般地計算總和,您需要提供兩個動作&#xff1a;>一種總計零項的方法>一種總結兩個項目的方法在Java中,您可以通過界面完成.這是一個完整的例子&#xff1a;import java.util.*;interface adder {T zero(); // Adding zero itemsT add(T lhs, T rhs); // Adding two …

java 字母金字塔_LeetCode756:金字塔轉換矩陣(JAVA題解)

題目描述現在&#xff0c;我們用一些方塊來堆砌一個金字塔。 每個方塊用僅包含一個字母的字符串表示。使用三元組表示金字塔的堆砌規則如下&#xff1a;對于三元組(A, B, C) &#xff0c;“C”為頂層方塊&#xff0c;方塊“A”、“B”分別作為方塊“C”下一層的的左、右子塊。當…

java final static_Java基礎之final、static關鍵字

一、前言關于這兩個關鍵字&#xff0c;應該是在開發工作中比較常見的&#xff0c;使用頻率上來說也比較高。接口中、常量、靜態方法等等。但是&#xff0c;使用頻繁卻不代表一定是能夠清晰明白的了解&#xff0c;能說出個子丑演卯來。下面&#xff0c;對這兩個關鍵字的常見用法…

docker mysql57_docker安裝mysql57

提高應用交付效率mysql1. 支持服務發現&#xff0c;避免服務重啟遷移 IP 變動帶來影響&#xff1b;2. 支持微服務化&#xff0c;下降代碼維護及重構復雜度&#xff0c;適應快速變化的業務需求。sql快速響應業務變化docker1. 靈活水平擴展&#xff0c;應對業務量的驟然變化&…

java刪除csv一行_在Java中讀取CSV文件時跳過第一行

嘿家伙我正在編寫解析器代碼來讀取.csv文件并將其解析為XML.這是我的代碼,它工作正常,但我希望它跳過文件中的第一行.所以我決定設置一個HashMap,但它似乎確實有效&#xff1a;for (int i 0; i < listOfFiles.length; i) {File file listOfFiles[i];if (file.isFile() &am…

java語言錯誤的是解釋運行的_Java基礎知識測試__A卷_答案

考試宣言:同學們, 考試考多少分不是我們的目的! 排在班級多少的名次也不是我們的初衷!我的考試的目的是要通過考試中的題目,檢查大家在這段時間的學習中,是否已經把需要掌握的知識掌握住了,如果哪道題目你不會做,又或者做錯了, 那么不用怕, 考完試后, 導師講解的時候你要注意聽…

java 持續集成工具_Jenkins-Jenkins(持續集成工具)下載 v2.249.2官方版--pc6下載站

Jenkins是一款基于java開發的持續集成工具&#xff0c;是一款開源軟件&#xff0c;主要用于監控持續重復的工作&#xff0c;為開發者提供一個開發易用的軟件平臺&#xff0c;使軟件的持續集成變成可能。。相關軟件軟件大小版本說明下載地址Jenkins是一款基于java開發的持續集成…

java中number類型能否相除_Java中 如果復數類成員是int型,怎么實現兩個復數相除...

(1) 復數類Complex 的屬性有&#xff1a;RealPart : int型&#xff0c;代表復數的實數部分ImaginPart : int型&#xff0c;代表復數的虛數部分package applet;import java.applet.*;import java.awt.*;public class j_1 extends Applet{Complex a,b,c,d,e,f;public void in…

java中線程調度遵循的原則_深入理解Java多線程核心知識:跳槽面試必備

多線程相對于其他 Java 知識點來講&#xff0c;有一定的學習門檻&#xff0c;并且了解起來比較費勁。在平時工作中如若使用不當會出現數據錯亂、執行效率低(還不如單線程去運行)或者死鎖程序掛掉等等問題&#xff0c;所以掌握了解多線程至關重要。本文從基礎概念開始到最后的并…

java禁止js獲取cookie_java中Cookie被禁用后Session追蹤問題

一.服務器端獲取Session對象依賴于客戶端攜帶的Cookie中的JSESSIONID數據。如果用戶把瀏覽器的隱私級別調到最高&#xff0c;這時瀏覽器是不會接受Cookie、這樣導致永遠在服務器端都拿不到的JSESSIONID信息。這樣就導致服務器端的Session使用不了。Java針對Cookie禁用&#xff…