{"id":12939,"date":"2018-08-27T18:58:46","date_gmt":"2018-08-27T16:58:46","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=12939"},"modified":"2018-08-27T18:58:46","modified_gmt":"2018-08-27T16:58:46","slug":"okio-libreria-per-ottimizzare-linput-output-in-java","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/okio-libreria-per-ottimizzare-linput-output-in-java\/","title":{"rendered":"Okio, libreria per ottimizzare l&#8217;input\/output in Java"},"content":{"rendered":"<p><a href=\"http:\/\/square.github.io\/\" target=\"_blank\" rel=\"noopener\">Square Open Source<\/a> \u00e8 una compagnia che offre ottimi strumenti\u00a0agli sviluppatori, di cui tanti dedicati al mobile come\u00a0<a href=\"http:\/\/www.devapp.it\/wordpress\/picasso-image-loader-per-android-developers\/\" target=\"_blank\" rel=\"noopener\">Picasso<\/a>, Dagger e OkHttp. In questo post, parliamo di un&#8217;altra loro grande idea, <a href=\"https:\/\/github.com\/square\/okio\" target=\"_blank\" rel=\"noopener\">Okio<\/a>, una libreria che mira a fare un p\u00f2 di ordine tra gli strumenti che in Java trattano l&#8217;Input\/Output, ottimizzando al contempo il rendimento.<\/p>\n<p>Okio si basa su due concetti principali: <strong>ByteString<\/strong>, una sequenza di byte immutabile che permette di trattare i dati binari come valori, autodeterminando il formato da utilizzare; <strong>Buffer<\/strong> \u00e8 una sequenza di byte che pu\u00f2 essere modificata e viene trattata come una coda (i dati vengono scritti alla fine della struttura e vengono letti in testa).<\/p>\n<p>Entrambe le tipologie di oggetti sono caratterizzati da un\u00a0funzionamento ottimizzato. Il ByteString, ad esempio, conserva i dati convertiti in UTF-8 in una sorta di <em>cache<\/em> rendendoli disponibili per una decodifica successiva mentre il Buffer si rende molto utile nel passaggio di dati tra thread differenti in quanto riesce a modificare il thread di appartenenza di segmenti di dati\u00a0senza necessit\u00e0 di effettuare una vera e propria copia.<\/p>\n<p>Come di consueto questa libreria pu\u00f2 essere inclusa in vari modi, con o senza l&#8217;aiuto di un sistema di <a href=\"http:\/\/www.devapp.it\/wordpress\/ant-maven-e-gradle-scenari-di-build-automation-in-java\/\" target=\"_blank\" rel=\"noopener\">build automation<\/a>:<\/p>\n<ul>\n<li><a href=\"https:\/\/search.maven.org\/remote_content?g=com.squareup.okio&amp;a=okio&amp;v=LATEST\" target=\"_blank\" rel=\"noopener\">\u00a0<\/a>si pu\u00f2 scaricare direttamente l&#8217;<a href=\"https:\/\/search.maven.org\/remote_content?g=com.squareup.okio&amp;a=okio&amp;v=LATEST\" target=\"_blank\" rel=\"noopener\">ultimo file jar<\/a>;<\/li>\n<li>integrare la libreria in un progetto Java mediante <strong>Maven<\/strong>:\n<pre class=\"lang:xhtml decode:true\">&lt;dependency&gt;\r\n    &lt;groupId&gt;com.squareup.okio&lt;\/groupId&gt;\r\n    &lt;artifactId&gt;okio&lt;\/artifactId&gt;\r\n    &lt;version&gt;1.11.0&lt;\/version&gt;\r\n&lt;\/dependency&gt;<\/pre>\n<\/li>\n<li>ricorrere a <strong>Gradle<\/strong> mediante una sua direttiva:\n<pre class=\"lang:java decode:true\">compile 'com.squareup.okio:okio:1.11.0'<\/pre>\n<\/li>\n<\/ul>\n<p>Le versioni qui riportate potrebbero naturalmente essere state modificate al momento dell&#8217;utilizzo pertanto le si verifichi sempre sul sito del progetto, alla sezione <a href=\"https:\/\/github.com\/square\/okio#download\" target=\"_blank\" rel=\"noopener\">Download<\/a>.<\/p>\n<p>Come trattate l&#8217;Input\/Output nei vostri progetti Java? Vi affidate all&#8217;approccio tradizionale agli Stream o vi siete gi\u00e0 rivolti a qualche libreria come Okio?<\/p>\n<p>Fateci sapere!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Square Open Source \u00e8 una compagnia che offre ottimi strumenti\u00a0agli sviluppatori, di cui tanti dedicati al mobile&#8230;<\/p>\n","protected":false},"author":561,"featured_media":13300,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[481],"tags":[1922,1526,1920,1919,1921],"class_list":["post-12939","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-risorse-utili","tag-input-output","tag-java","tag-okhttp","tag-okio","tag-square-open-source"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12939","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/561"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=12939"}],"version-history":[{"count":3,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12939\/revisions"}],"predecessor-version":[{"id":13615,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/12939\/revisions\/13615"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media\/13300"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=12939"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=12939"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=12939"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}