Nykyaikaiset vaihtoehdot: JSON ja Protocol Buffers
Korvaa Javan serialisointi siirrettävällä ja turvallisella Jackson JSON- ja Protocol Buffers -pohjaisella pysyväistallennuksella.
Nykyaikaiset vaihtoehdot: JSON ja Protocol Buffers on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 4 oppituntia.
Miksi Java-serialisointi kannattaa korvata?
Java-serialisointi toimii vain JVM:ssä, on monisanaista ja hidasta sekä aiheuttaa tietoturvariskin. Nykyaikaisissa sovelluksissa suositaan JSONia, joka on ihmisen luettavaa ja kieliriippumatonta, tai Protocol Buffersia, joka on tiivis, skeemaan perustuva ja nopea.
Jackson: de facto -JSON-kirjasto
Jacksonin ObjectMapper muuntaa olioita JSON-merkkijonoiksi ja takaisin olioiksi. Lisätkää projektiinne com.fasterxml.jackson.core:jackson-databind.
ObjectMapper mapper = new ObjectMapper();
User user = new User("Alice", 30);
String json = mapper.writeValueAsString(user);
System.out.println(json); // {"name":"Alice","age":30}
User restored = mapper.readValue(json, User.class);Jacksonin mukauttaminen annotaatioilla
Käyttäkää annotaatioita @JsonProperty, @JsonIgnore, @JsonAlias ja @JsonFormat serialisoinnin hallintaan muuttamatta mallin kenttien nimiä.
public class Product {
@JsonProperty("product_name")
private String name;
@JsonIgnore
private String internalCode;
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate releaseDate;
}Jackson-moduulit: Java Time -tuki
Rekisteröikää JavaTimeModule, jotta LocalDate, LocalDateTime ja Instant serialisoidaan oikein sen sijaan, että tuloksena olisi kenttiä täynnä oleva JSON-olio.
ObjectMapper mapper = new ObjectMapper()
.registerModule(new JavaTimeModule())
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
String json = mapper.writeValueAsString(LocalDate.now());
System.out.println(json); // "2024-06-15"GSON kevyenä vaihtoehtona
Googlen GSON on Jacksonia yksinkertaisempi: perustyypeille ei tarvita määrityksiä, mutta siitä puuttuvat Jacksonin monipuoliset annotaatiot ja suorituskyky laajassa käytössä.
Gson gson = new Gson();
String json = gson.toJson(new User("Bob", 25));
User user = gson.fromJson(json, User.class);Mitä Protocol Buffers ovat?
Protocol Buffers (Protobuf) on Googlen binäärimuotoinen serialisointimuoto. Määrittelette .proto-skeeman, käännätte sen Java-luokiksi ja saatte tiiviitä viestejä, joissa on sisäänrakennettu versiointi.
// user.proto
syntax = "proto3";
message UserProto {
string name = 1;
int32 age = 2;
}Protobuf-viestin koodaus
Generoiduissa luokissa on builder-rajapinta. Kutsukaa toByteArray()-metodia saadaksenne binäärisisällön ja parseFrom(bytes)-metodia sen purkamiseksi.
UserProto user = UserProto.newBuilder()
.setName("Alice")
.setAge(30)
.build();
byte[] bytes = user.toByteArray();
UserProto restored = UserProto.parseFrom(bytes);
System.out.println(restored.getName());JSONin ja Protobufin kompromissit
JSON on ihmisen luettavaa eikä edellytä skeemaa. Protobuf on 3–10 kertaa pienempi ja nopeampi, mutta edellyttää skeemaa ja koodigeneraatiota. Valitkaa JSON REST-rajapintoihin ja Protobuf suuren läpimenon sisäisiin palveluihin.
Skeeman kehittäminen Protobufilla
Protobuf-kentät numeroidaan, niitä ei nimetä. Voitte turvallisesti lisätä uusia kenttiä tai poistaa vanhoja käytöstä rikkomatta olemassa olevia asiakasohjelmia, kunhan ette koskaan käytä kenttien numeroita uudelleen.
// v2 of user.proto — backwards compatible
message UserProto {
string name = 1;
int32 age = 2;
string email = 3; // new in v2
}Siirtyminen Java-serialisoinnista
Korvatkaa ObjectOutputStream-kirjoituspolut metodilla ObjectMapper.writeValue() tai Protobuf-metodilla writeTo(). Säilyttäkää vanha serialisointi vain vanhan datan siirtämistä varten.
Tietoturva: ei deserialisointigadgetteja
JSON ja Protobuf eivät kutsu deserialisoinnin aikana mielivaltaisia konstruktoreita tai metodeja, joten ne poistavat gadget-ketjuhyökkäykset, jotka ovat Java-serialisoinnin yleinen ongelma.
Pikatarkistus
Mikä on Protocol Buffersin keskeinen etu JSONiin verrattuna?
Kertaus
Korvatkaa Java-serialisointi Jacksonin JSONilla REST-rajapintoja ja luettavuutta varten tai Protocol Buffersilla suorituskykykriittisiä palveluita varten. Molemmat ovat kieltenvälisiä, tukevat skeeman hallittua kehittämistä ja ovat rakenteeltaan turvallisia.
Opi Java tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 104
- Oppitunnit
- 374
Usein kysytyt kysymykset
Onko oppitunti ”Nykyaikaiset vaihtoehdot: JSON ja Protocol Buffers” ilmainen?
Kyllä – oppitunnin ”Nykyaikaiset vaihtoehdot: JSON ja Protocol Buffers” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Nykyaikaiset vaihtoehdot: JSON ja Protocol Buffers”?
Korvaa Javan serialisointi siirrettävällä ja turvallisella Jackson JSON- ja Protocol Buffers -pohjaisella pysyväistallennuksella. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Nykyaikaiset vaihtoehdot: JSON ja Protocol Buffers”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?
Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Javan serialisoinnin perusteet
- transient-kentät ja serialVersionUID
- Mukautettu serialisointi: writeObject ja readObject
- Nykyaikaiset vaihtoehdot: JSON ja Protocol Buffers