{"id":390,"date":"2017-05-29T21:00:14","date_gmt":"2017-05-29T19:00:14","guid":{"rendered":"http:\/\/antek.atthost24.pl\/?p=390"},"modified":"2017-05-31T19:11:50","modified_gmt":"2017-05-31T17:11:50","slug":"xstream-czyli-taka-lepsza-serializacja","status":"publish","type":"post","link":"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/05\/29\/xstream-czyli-taka-lepsza-serializacja\/","title":{"rendered":"XStream, czyli taka lepsza serializacja!"},"content":{"rendered":"<p>Dzisiaj om\u00f3wimy bibliotek\u0119 s\u0142u\u017c\u0105c\u0105 do serializacji obiekt\u00f3w w Javie &#8211; XStream.<\/p>\n<h3>Serializacja w Javie<\/h3>\n<p>Po co nam biblioteka do serializacji skoro sama Java dostarcza nam taki mechanizm? Sp\u00f3jrzmy zatem jak to wygl\u0105da w Javie.<\/p>\n<p>Na pocz\u0105tku stw\u00f3rzmy sobie prost\u0105 klas\u0119 z kilkoma polami, kt\u00f3rej instancje b\u0119dziemy serializowa\u0107.<\/p>\n<pre class=\"lang:default decode:true \">package pl.lantkowiak;\r\n\r\nimport java.io.FileOutputStream;\r\nimport java.io.IOException;\r\nimport java.io.ObjectOutputStream;\r\nimport java.io.Serializable;\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\n\r\npublic class SerializableClass implements Serializable {\r\n\tprivate int field1;\r\n\tprivate String field2;\r\n\tprivate List&lt;Integer&gt; field3;\r\n\tprivate InnerClass field4;\r\n\r\n\tpublic SerializableClass(int field1, String field2, List&lt;Integer&gt; field3, InnerClass field4) {\r\n\t\tthis.field1 = field1;\r\n\t\tthis.field2 = field2;\r\n\t\tthis.field3 = field3;\r\n\t\tthis.field4 = field4;\r\n\t}\r\n\r\n\tpublic static class InnerClass implements Serializable {\r\n\t\tprivate double innerField1;\r\n\t\tprivate String innerField2;\r\n\r\n\t\tpublic InnerClass(double innerField1, String innerField2) {\r\n\t\t\tthis.innerField1 = innerField1;\r\n\t\t\tthis.innerField2 = innerField2;\r\n\t\t}\r\n\t}\r\n}<\/pre>\n<p>Teraz stw\u00f3rzmy instancje naszej klasy i j\u0105 zserializujmy, a nast\u0119pnie zdeserializujmy.<\/p>\n<pre class=\"lang:default decode:true\">final List&lt;Integer&gt; field3 = new ArrayList&lt;&gt;();\r\nfield3.add(45);\r\nfield3.add(78);\r\nfield3.add(12);\r\nfinal InnerClass field4 = new InnerClass(3.0, \"inner class\");\r\n\r\nfinal SerializableClass serializableClass = new SerializableClass(13, \"sc\", field3, field4);\r\n\r\n \/\/ serializacja\r\n try (FileOutputStream fout = new FileOutputStream(\"C:\\\\file.txt\");\r\n ObjectOutputStream oos = new ObjectOutputStream(fout)) {\r\n oos.writeObject(serializableClass);\r\n }\r\n\r\n \/\/ deserializacja\r\n try (FileInputStream fin = new FileInputStream(\"C:\\\\file.txt\");\r\n ObjectInputStream ois = new ObjectInputStream(fin)) {\r\n final SerializableClass deserialized = (SerializableClass) ois.readObject();\r\n }<\/pre>\n<p>Jak widzimy sama serializacja jest dosy\u0107 prosta i mo\u017cemy j\u0105 \u0142atwo wykona\u0107 w kilku liniach kodu.<\/p>\n<p>Zerknijmy teraz do naszego pliku, kt\u00f3ry zawiera zserializowany obiekt.<\/p>\n<pre class=\"lang:default decode:true \">...<\/pre>\n<p>Jak widzimy nie jest to zbyt czytelne \ud83d\ude09<\/p>\n<p>Niestety z tego pliku nie jeste\u015bmy w stanie w \u0142atwy spos\u00f3b odczyta\u0107 zserializowanych warto\u015bci, nie m\u00f3wi\u0105c o ich edycji.<\/p>\n<h3>XStream w akcji!<\/h3>\n<p>I tutaj z pomoc\u0105 przychodzi XStream!<\/p>\n<p>Na pocz\u0105tku musimy doda\u0107 zale\u017cno\u015b\u0107 do naszego projektu:<\/p>\n<pre class=\"lang:xhtml decode:true \">&lt;dependency&gt;\r\n\t&lt;groupId&gt;xstream&lt;\/groupId&gt;\r\n\t&lt;artifactId&gt;xstream&lt;\/artifactId&gt;\r\n\t&lt;version&gt;1.2.2&lt;\/version&gt;\r\n&lt;\/dependency&gt;<\/pre>\n<p>Zr\u00f3bmy teraz najprostsz\u0105 serializacje i deserializacje naszego obiektu.<\/p>\n<pre class=\"lang:default decode:true\">\/\/ serializacja\r\nXStream xstream = new XStream();\r\ntry (FileOutputStream fout = new FileOutputStream(\"C:\\\\file.xml\")) {\r\n xstream.toXML(serializableClass, fout);\r\n}\r\n\r\n\/\/ deserializacja\r\ntry (FileInputStream fin = new FileInputStream(\"C:\\\\file.xml\")) {\r\n final SerializableClass deserialized = (SerializableClass) xstream.fromXML(fin);\r\n}\r\n<\/pre>\n<p>Jak wida\u0107 operacje te przy u\u017cyciu XStream r\u00f3wnie\u017c mo\u017cemy wykona\u0107 przy u\u017cyciu kilku linii kodu.<\/p>\n<p>Na samym pocz\u0105tku musimy stworzy\u0107 instancje\u00a0<em>XStream<\/em>, a nast\u0119pnie wywo\u0142a\u0107 na niej odpowiednio metody <em>toXML<\/em> lub <em>fromXML<\/em>. Pierwsza metoda przyjmuje jako parametry obiekt, kt\u00f3ry ma by\u0107 zserializowany oraz <em>OutputStream<\/em>, do kt\u00f3rego zserializowany obiekt ma by\u0107 zapisany.\u00a0Druga metoda natomiast na wej\u015bcie przyjmuje InputStream, z kt\u00f3rego ma by\u0107 odczytany zserializowany obiekt, a na wyj\u015bciu otrzymujemy nasz zdeserializowany obiekt.<\/p>\n<p>Zajrzyjmy teraz do pliku z zserializowanym obiektem.<\/p>\n<pre class=\"lang:default decode:true \">&lt;pl.lantkowiak.SerializableClass&gt;\r\n  &lt;field1&gt;13&lt;\/field1&gt;\r\n  &lt;field2&gt;sc&lt;\/field2&gt;\r\n  &lt;field3&gt;\r\n    &lt;int&gt;45&lt;\/int&gt;\r\n    &lt;int&gt;78&lt;\/int&gt;\r\n    &lt;int&gt;12&lt;\/int&gt;\r\n  &lt;\/field3&gt;\r\n  &lt;field4&gt;\r\n    &lt;innerField1&gt;3.0&lt;\/innerField1&gt;\r\n    &lt;innerField2&gt;inner class&lt;\/innerField2&gt;\r\n  &lt;\/field4&gt;\r\n&lt;\/pl.lantkowiak.SerializableClass&gt;<\/pre>\n<p>Jak wida\u0107 plik jest w formacie XML (co mog\u0142a sugerowa\u0107 nazwa metody toXML ;)). Z pliku mo\u017cemy odczyta\u0107, kt\u00f3ra klasa jest zserializowana &#8211;\u00a0pl.lantkowiak.SerializableClass. Widzimy te\u017c pe\u0142n\u0105 struktur\u0119 klasy wraz z warto\u015bciami poszczeg\u00f3lnych p\u00f3l. Dzi\u0119ki temu bez problemu mo\u017cemy odczyta\u0107 jak wygl\u0105da zapisany obiekt, a w razie potrzeby mo\u017cemy go bez problemy edytowa\u0107.<\/p>\n<h3>Podsumowanie<\/h3>\n<p>Dzisiaj zapoznali\u015bmy si\u0119 z bibliotek\u0105 XStream, kt\u00f3rej mo\u017cemy u\u017cy\u0107 do serializacji obiekt\u00f3w do XMLa, dzi\u0119ki czemu zserializowany obiekt b\u0119dzie dla nas czytelny i \u0142atwy do modyfikacji.<\/p>\n<p>XStream posiada jeszcze bardziej zaawansowane opcje, z kt\u00f3rymi warto si\u0119 w przysz\u0142o\u015bci zapozna\u0107 \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dzisiaj om\u00f3wimy bibliotek\u0119 s\u0142u\u017c\u0105c\u0105 do serializacji obiekt\u00f3w w Javie &#8211; XStream. Serializacja w Javie Po co nam biblioteka do serializacji skoro sama Java dostarcza nam taki mechanizm? Sp\u00f3jrzmy&#8230;<\/p>\n","protected":false},"author":1,"featured_media":394,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24,12,7],"tags":[],"class_list":["post-390","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-biblioteka","category-dsp2017","category-java"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>XStream, czyli taka lepsza serializacja! - Lukasz Antkowiak&#039;s blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/05\/29\/xstream-czyli-taka-lepsza-serializacja\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"XStream, czyli taka lepsza serializacja! - Lukasz Antkowiak&#039;s blog\" \/>\n<meta property=\"og:description\" content=\"Dzisiaj om\u00f3wimy bibliotek\u0119 s\u0142u\u017c\u0105c\u0105 do serializacji obiekt\u00f3w w Javie &#8211; XStream. Serializacja w Javie Po co nam biblioteka do serializacji skoro sama Java dostarcza nam taki mechanizm? Sp\u00f3jrzmy...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/05\/29\/xstream-czyli-taka-lepsza-serializacja\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukasz Antkowiak&#039;s blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-05-29T19:00:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-05-31T17:11:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.lantkowiak.pl\/wp-content\/uploads\/2017\/05\/SerializingObjectsJava01.png\" \/>\n\t<meta property=\"og:image:width\" content=\"846\" \/>\n\t<meta property=\"og:image:height\" content=\"376\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"\u0141ukasz Antkowiak\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u0141ukasz Antkowiak\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minuty\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/05\/29\/xstream-czyli-taka-lepsza-serializacja\/\",\"url\":\"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/05\/29\/xstream-czyli-taka-lepsza-serializacja\/\",\"name\":\"XStream, czyli taka lepsza serializacja! - Lukasz Antkowiak&#039;s blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.lantkowiak.pl\/#website\"},\"datePublished\":\"2017-05-29T19:00:14+00:00\",\"dateModified\":\"2017-05-31T17:11:50+00:00\",\"author\":{\"@id\":\"https:\/\/blog.lantkowiak.pl\/#\/schema\/person\/009bfc4db220c225786c59b1748ba1e6\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/05\/29\/xstream-czyli-taka-lepsza-serializacja\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/05\/29\/xstream-czyli-taka-lepsza-serializacja\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/05\/29\/xstream-czyli-taka-lepsza-serializacja\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/blog.lantkowiak.pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"XStream, czyli taka lepsza serializacja!\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.lantkowiak.pl\/#website\",\"url\":\"https:\/\/blog.lantkowiak.pl\/\",\"name\":\"Lukasz Antkowiak&#039;s blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.lantkowiak.pl\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.lantkowiak.pl\/#\/schema\/person\/009bfc4db220c225786c59b1748ba1e6\",\"name\":\"\u0141ukasz Antkowiak\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/blog.lantkowiak.pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e18e2bfe319da9b5757cf7f7ae1bfecf?s=96&d=monsterid&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e18e2bfe319da9b5757cf7f7ae1bfecf?s=96&d=monsterid&r=g\",\"caption\":\"\u0141ukasz Antkowiak\"},\"description\":\"dd\",\"url\":\"https:\/\/blog.lantkowiak.pl\/index.php\/author\/antek\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"XStream, czyli taka lepsza serializacja! - Lukasz Antkowiak&#039;s blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/05\/29\/xstream-czyli-taka-lepsza-serializacja\/","og_locale":"pl_PL","og_type":"article","og_title":"XStream, czyli taka lepsza serializacja! - Lukasz Antkowiak&#039;s blog","og_description":"Dzisiaj om\u00f3wimy bibliotek\u0119 s\u0142u\u017c\u0105c\u0105 do serializacji obiekt\u00f3w w Javie &#8211; XStream. Serializacja w Javie Po co nam biblioteka do serializacji skoro sama Java dostarcza nam taki mechanizm? Sp\u00f3jrzmy...","og_url":"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/05\/29\/xstream-czyli-taka-lepsza-serializacja\/","og_site_name":"Lukasz Antkowiak&#039;s blog","article_published_time":"2017-05-29T19:00:14+00:00","article_modified_time":"2017-05-31T17:11:50+00:00","og_image":[{"width":846,"height":376,"url":"https:\/\/blog.lantkowiak.pl\/wp-content\/uploads\/2017\/05\/SerializingObjectsJava01.png","type":"image\/png"}],"author":"\u0141ukasz Antkowiak","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"\u0141ukasz Antkowiak","Szacowany czas czytania":"3 minuty"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/05\/29\/xstream-czyli-taka-lepsza-serializacja\/","url":"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/05\/29\/xstream-czyli-taka-lepsza-serializacja\/","name":"XStream, czyli taka lepsza serializacja! - Lukasz Antkowiak&#039;s blog","isPartOf":{"@id":"https:\/\/blog.lantkowiak.pl\/#website"},"datePublished":"2017-05-29T19:00:14+00:00","dateModified":"2017-05-31T17:11:50+00:00","author":{"@id":"https:\/\/blog.lantkowiak.pl\/#\/schema\/person\/009bfc4db220c225786c59b1748ba1e6"},"breadcrumb":{"@id":"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/05\/29\/xstream-czyli-taka-lepsza-serializacja\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.lantkowiak.pl\/index.php\/2017\/05\/29\/xstream-czyli-taka-lepsza-serializacja\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.lantkowiak.pl\/index.php\/2017\/05\/29\/xstream-czyli-taka-lepsza-serializacja\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/blog.lantkowiak.pl\/"},{"@type":"ListItem","position":2,"name":"XStream, czyli taka lepsza serializacja!"}]},{"@type":"WebSite","@id":"https:\/\/blog.lantkowiak.pl\/#website","url":"https:\/\/blog.lantkowiak.pl\/","name":"Lukasz Antkowiak&#039;s blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.lantkowiak.pl\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pl-PL"},{"@type":"Person","@id":"https:\/\/blog.lantkowiak.pl\/#\/schema\/person\/009bfc4db220c225786c59b1748ba1e6","name":"\u0141ukasz Antkowiak","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/blog.lantkowiak.pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e18e2bfe319da9b5757cf7f7ae1bfecf?s=96&d=monsterid&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e18e2bfe319da9b5757cf7f7ae1bfecf?s=96&d=monsterid&r=g","caption":"\u0141ukasz Antkowiak"},"description":"dd","url":"https:\/\/blog.lantkowiak.pl\/index.php\/author\/antek\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/posts\/390","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/comments?post=390"}],"version-history":[{"count":6,"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/posts\/390\/revisions"}],"predecessor-version":[{"id":403,"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/posts\/390\/revisions\/403"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/media\/394"}],"wp:attachment":[{"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/media?parent=390"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/categories?post=390"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.lantkowiak.pl\/index.php\/wp-json\/wp\/v2\/tags?post=390"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}