在弱網傳輸的情況下,是怎麼做到節約流量的(面試小問題,Android篇)

來源:互聯網
上載者:User

標籤:android

馬上畢業了,在畢業之際,我辭掉了以前的實習工作,主要是工作內容不太感興趣。最近在找工作,主要是找Java和Android方面的工作。自以為學得不錯,但是面試屢屢受挫。先提一下問到的一些問題吧。

第一個:在弱網傳輸的情況下,是怎麼做到節約流量的?

由於Android接觸的確實不多,這個問題自然沒有很愉快的答上來。

我這樣回答的:將一些資料進行壓縮,例如傳一個字串,先將字串轉換成字元數組的形式,然後對這個字元數組進行壓縮。然後就是對很多傳輸對象(一般都是JSON,XML這種方式太笨重了),提取公用的部分,然後只將不同的部分傳輸過去(我在想,怎麼知道是相同的呢...)

自認為回答的不太好,面試官也沒有多說。

面完試,在網上搜資料,加上自己的理解,整理了下。

首先來說一下Android與伺服器的資料互動方式吧。

1、  Socket(TCP/UDP)

2、  NIO,還有衍生的NIO架構例如Netty

3、  WebService(特指Soap協議下用XML傳輸資料)

4、  JSON(特質http協議下用基於Rest風格的傳輸方式)

這裡呢,說到資料壓縮,我覺得應該是指將JSON進行先壓縮再傳輸吧。

解決資料過大的問題,最直觀的方法就是壓縮資料。伺服器將需要傳遞的資料先進行壓縮,再發送給Android用戶端,Android用戶端接收到壓縮的資料,對其解壓,得到壓縮前的資料。

下面這個圖應該能說明具體情況。


引用http://www.cnblogs.com/lykbk/archive/2013/08/15/3259045.html


那麼無非就是一些壓縮演算法的問題了。那怎麼選擇壓縮演算法咧?這裡有一個壓縮演算法。

引用 http://www.cnblogs.com/answer1991/archive/2012/05/07/2487052.html

packagecom.chenjun.utils.compress; importjava.io.ByteArrayInputStream;importjava.io.ByteArrayOutputStream;importjava.io.InputStream;importjava.io.OutputStream;importjava.util.zip.GZIPInputStream;importjava.util.zip.GZIPOutputStream; publicclass Compress {    private static final int BUFFER_LENGTH =400;          //壓縮位元組最小長度,小於這個長度的位元組數組不適合壓縮,壓縮完會更大    public static final int BYTE_MIN_LENGTH =50;          //位元組數組是否壓縮標誌位    public static final byteFLAG_GBK_STRING_UNCOMPRESSED_BYTEARRAY = 0;    public static final byteFLAG_GBK_STRING_COMPRESSED_BYTEARRAY = 1;    public static final byteFLAG_UTF8_STRING_COMPRESSED_BYTEARRAY = 2;    public static final byteFLAG_NO_UPDATE_INFO = 3;       /**      * 資料壓縮      *       * @param is      * @param os      * @throws Exception      */     public static void compress(InputStream is,OutputStream os)              throws Exception {           GZIPOutputStream gos = newGZIPOutputStream(os);           int count;          byte data[] = newbyte[BUFFER_LENGTH];          while ((count = is.read(data, 0,BUFFER_LENGTH)) != -1) {              gos.write(data, 0, count);          }           gos.finish();           gos.flush();          gos.close();      }            /**      * 資料解壓縮      *       * @param is      * @param os      * @throws Exception      */     public static void decompress(InputStreamis, OutputStream os)              throws Exception {           GZIPInputStream gis = newGZIPInputStream(is);           int count;          byte data[] = newbyte[BUFFER_LENGTH];          while ((count = gis.read(data, 0,BUFFER_LENGTH)) != -1) {              os.write(data, 0, count);          }           gis.close();      }       /**     * 資料壓縮     *      * @param data     * @return     * @throws Exception     */     public static byte[] byteCompress(byte[]data) throws Exception {         ByteArrayInputStream bais = newByteArrayInputStream(data);         ByteArrayOutputStream baos = newByteArrayOutputStream();          // 壓縮         compress(bais, baos);          byte[] output =baos.toByteArray();          baos.flush();         baos.close();          bais.close();          return output;     }          /**     * 資料解壓縮     *      * @param data     * @return     * @throws Exception     */     public static byte[] byteDecompress(byte[]data) throws Exception {         ByteArrayInputStream bais = newByteArrayInputStream(data);         ByteArrayOutputStream baos = newByteArrayOutputStream();          // 解壓縮          decompress(bais, baos);          data = baos.toByteArray();          baos.flush();         baos.close();          bais.close();          return data;     } }
筆者目前在找工作。郵箱[email protected]。本廣告長期有效.....玩笑話。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.