gushelom.ru

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 Oracle Java i din webbläsare på Ubuntu LinuxSå här aktiverar du Oracle Java i din webbläsare på Ubuntu Linux
    Hur man ökar Java-minnet i Windows 7Hur man ökar Java-minnet i Windows 7
    Hur man ringer en metod i JavaHur man ringer en metod i Java
    Så här konfigurerar du Java HomeSå här konfigurerar du Java Home
    Så här konfigurerar du Java_Home-sökvägen i UbuntuSå här konfigurerar du Java_Home-sökvägen i Ubuntu
    Så här skapar du ditt första Java-program i Ubuntu LinuxSå här skapar du ditt första Java-program i Ubuntu Linux
    Hur delas rader i JavaHur delas rader i Java
    Så här skapar du ett GUI-nät i JavaSå här skapar du ett GUI-nät i Java
    Hur man skapar en variabel i JavaHur man skapar en variabel i Java
    Hur man blir en Java-programmerareHur man blir en Java-programmerare
    » » Så här kodar du en sträng till Base64 i Java

    © 2011—2021 gushelom.ru