Så här kodar du en sträng till Base64 i Java
Base64 är en metod för att koda varje 3 bytes av input i 4 byte av output-används vanligen för att koda bilden eller ljud för att skicka dem till e-post (även om en tid präglad av linjerna i en 7-byte transmissioner är praktiskt taget klar), och ett sätt att dölja autentisering av webbsidor (användarnamn och lösenord) från spionage. Här är ett exempel på hur man programmerar en Base64-kodare i Java, ett multiplattforms programmeringsspråk. Detta exempel, och testkodningssträngarna, lånas frånWikipedia artikeln.
steg
1
Ange information och filnamn.
2
Starta din redaktör, till exempel Anteckningsblock, och ange preliminär information, t.ex. klassdeklarationen och kända konstanter. Ring till Base64.java-filen.
3
De konstanta värdena anges, så säger artikeln i relevanta RFC. Det är generellt en bra idé att läsa alla relevanta RFC innan du börjar programmera.
offentlig klass Base64 {privat statisk slutlig sträng base64code = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"+ "abcdefghijklmnopqrstuvwxyz" + "0123456789" + "+ /"-privat statisk slutinteg splitLinesAt = 76-
4
Behandling av tecken som byte innebär att multibyte tecken, som japanska eller kinesiska, inte kommer att korrigeras korrekt. Därför bör vi använda metoden getBytes () i strängarna för att konvertera Unicode-tecknen i den aktuella localen till byte innan kodningen börjar. Men till exempel, om du arbetar på ett japanskt dokument med en amerikansk engelsk lokal, måste du ange platsen för getBytes () -produktionen, som getBytes (getBytes ("UTF-8").
5
Låt oss se hur många vadderingsbyte behövs. Java-moduloperatören är användbar vid denna punkt. Vi förklarar också ett underrutinnamn och parametrar medan vi är här.
6
Nu använder vi detta värde för att göra en nollkudde av ingången. Observera att om ingen padding behövs läggs ingenting till, eftersom vi kör modul 3 en andra gång, vrid 3 till en 0.
public static byte [] zeroPad (int längd, byte [] bytes) {byte [] vadderad = new byte [längd] - // initialiseras till noll genom JVMSystem.arraycopy (bitgrupper, 0, vadderad, 0, bytes.length) - returnera vadderade-} offentliga statiska strängkod (strängsträng) {String encoded = ""-byte [] stringArray-försök {stringArray = string.getBytes ("UTF-8") - // använda lämplig sträng Encoding} catch! (Undantag ignoreras) {stringArray string.getBytes = () - // standard lokal användning snarare än croak paddingCount} int = (3 - (stringArray.length% 3)%) 3- stringArray = zeroPad (stringArray.length + paddingCount, stringArray) -
7
Låt oss nu komma till rätta: vi packar 3 byte i ett 24-bitars heltal åt gången och extraherar sedan ett 6-bitars index i kodningssträngen. Dessa siffror är inte magiska: 24 är uppdelad i 6 med 4 och 6 bitar kan innehålla värden från 0 till 63, vilket kan indexera valfritt värde i en 64-bitars kodningssträng.
för (int i = 0-i < stringArray.length-i + = 3) {int j = ((stringArray [i] & 0xff) << 16) + ((strängArray [i + 1] & 0xff) << 8) + (strängArray [i + 2] & 0xff) -encoded = encoded + base64code.charAt ((j > 18) & 0x3f) + base64code.charAt ((j > 12) & 0x3f) + base64code.charAt ((j > 6) & 0x3f) + base64code.charAt (j & 0x3f) -}
8
Slutligen packar vi utmatningen efter vaddering, sätter in CRLF till de nödvändiga 76-byte-ändarna, med hjälp av en subrutin för tydlighet.
returnera splitLines (encoded.substring (0, encoded.length () - paddingCount) +"==".ubstring (0, paddingCount)) -} statiska String splitLines (string string) {String lines = ""-for (int i = 0-i < string.length () - i + = splitLinesAt) {linjer + = string.substring (jag, Math.min (string.length (), i + splitLinesAt)) - linjer + = " R n"-} returlinjer-}
9
Om vi önskar kan vi lägga till en huvudrutin för testning. Det här är vanligtvis en bra idé innan du gör din kod tillgänglig för allmänheten.
statisk statisk tomt huvud (String [] args) {för (int i = 0- i < args.length-i ++) {System.err.println ("kodning "" + args [i] + """) -System.out.println (koda (args [i])) -}}
10
Här är det fullständiga formuläret:
offentlig klass Base64 {privat statisk slutlig sträng base64code = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"+ "abcdefghijklmnopqrstuvwxyz" + "0123456789" + "+ /"-privat static final int = 76 splitLinesAt-public static byte [] zeroPad (int längd, byte [] bytes) {byte [] vadderad = new byte [längd] - // initialiseras till noll genom JVMSystem.arraycopy (bitgrupper, 0, vadderad, 0, bytes.length) -return vadderad-} statisk statisk strängkodning (strängsträng) {String encoded = ""-byte [] stringArray-försök {stringArray = string.getBytes ("UTF-8") - // använda lämplig kodning sträng} catch (Exception ignoreras) {stringArray string.getBytes = (!) - // använda den lokala standard snarare än kraxande} // bestämma hur många bytes stoppning för att lägga till i outputint paddingCount = (3 - (stringArray.length% 3))% 3 - Nödvändigt // foga någon utfyllnad till inputstringArray = zeroPad (stringArray.length + paddingCount, stringArray) - // process 3 bytes i taget, skapandes fyra utgångsbytes // oroa CRLF-insertioner laterfor (int i = 0-i < stringArray.length-i + = 3) {int j = ((stringArray [i] & 0xff) << 16) + ((strängArray [i + 1] & 0xff) << 8) + (strängArray [i + 2] & 0xff) -encoded = encoded + base64code.charAt ((j > 18) & 0x3f) + base64code.charAt ((j > 12) & 0x3f) + base64code.charAt ((j > 6) & 0x3f) + base64code.charAt (j & 0x3f) -} // ersätt kodade padding nulls med "="returnera splitLines (encoded.substring (0, encoded.length () -paddingCount) + "==".ubstring (0, paddingCount)) -} statiska String splitLines (string string) {String lines = ""-for (int i = 0-i < string.length () - i + = splitLinesAt) {linjer + = string.substring (jag, Math.min (string.length (), i + splitLinesAt)) - linjer + = " R n"-} returlinjer-} statisk statisk tomt huvud (String [] args) {for (int i = 0- i < args.length-i ++) {System.err.println ("kodning "" + args [i] + """) -System.out.println (koda (args [i])) -}}}
11
Kompilera den med javac, gcj, jikes eller vad preferisci- och testiamolo hjälp citatet Hobbes från den Wikipedia artikeln:
$ gcj -C Base64.java $ java Base64 "Detta är inte den enda anledningen till detta, men det är inte bara av hans orsak, men också av andra djur, som är en sinnesglädje."
12
Här är resultatet:
kodning "Detta är inte den enda anledningen till detta, men det är inte bara av hans orsak, utan av denna singularpassion från andra djur, som är en sinnesglädje."TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4 =
13
Motsvarar exakt! Det betyder att båda programmen är felaktiga eller att de är mer eller mindre korrekta. Vid denna tidpunkt vill du granska Wikipedia-artikeln och läsa de anslutna RFC: erna för att kontrollera att du inte har glömt någonting.
tips
- Tänk inte att du alltid måste förstå någonting innan du kodar det. Bli tydligare när du går.
- Java är bra som språk allmän programmering och för enheter som mobiltelefoner kan vara det enda alternativet för programmatori- men du kan hitta syntaxen för jаvascript eller Python mer koncis och kraftfull. Varje språk har sina egna styrkor och svagheter.
- Försök skriva dekoderingsmetoden () för denna modul!
- Medan behövs läser relevanta RFC att producera koden, kan information overload vara opprimente- ibland den bästa metoden är scremarli, skriva kod baserat på vad du förstår, och sedan gå tillbaka och kontrollera funktionaliteten punkt för punkt basis på de grundläggande kraven i RFC: erna.
Dela på sociala nätverk:
Relaterade
- Så här aktiverar du Java i Firefox
- Så här aktiverar du Oracle Java i din webbläsare på Ubuntu Linux
- Hur man ökar Java-minnet i Windows 7
- Hur man ringer en metod i Java
- Så här konfigurerar du Java Home
- Så här konfigurerar du Java_Home-sökvägen i Ubuntu
- Så här skapar du ditt första Java-program i Ubuntu Linux
- Hur delas rader i Java
- Så här skapar du ett GUI-nät i Java
- Hur man skapar en variabel i Java
- Hur man blir en Java-programmerare
- Så här kör du Java Update
- Så här installerar du Java
- Så här installerar du Java i Windows 8
- Så här installerar du Java på Ubuntu
- Så här installerar du Java Development Kit (JDK) på Mac OS X
- Så här byter du en sträng i Java
- Hur man får längden på en sträng i Java
- Hur man löser Java fel
- Hur hämtar du Java för Internet Explorer
- Hur serialiserar ett objekt i Java