A. android Socket一個 BufferedReader讀取問題
1,網路編程傳輸的數據都是以二進制格式來傳輸的。2,所以傳輸流第一層必須使用位元組流而不能使用字元流3,後面就可以使用BufferedReader套接在位元組流外層了例:BufferedReaderclientReader=newBufferedReader(newInputStreamReade(socket.getInputStream()));//讀數據PrintStreamprintStream=newPrintStream(socket.getOutputStream());//發送數據printStream.println("xxxxxxx");發送一個帶換行符的數據clientReader.readline();//接收帶換行符的數據4,您也可以試試使用BufferedInputStream。
B. Android: 如何訪問項目文件夾下的文件
Android中讀取assets文件夾裡面的文件,可使用SDK的API,需要用AssetManager以位元組流的形式讀取文件。
assets的讀取方式:
1. 先在Activity裡面調用getAssets() 來獲取AssetManager引用。
2. 再用AssetManager的open(String fileName, int accessMode) 方法則指定讀取的文件以及訪問模式就能得到輸入流InputStream。
3. 然後就是用已經open file 的inputStream讀取文件,讀取完成後記得inputStream.close() 。
4.調用AssetManager.close() 關閉AssetManager。
需要注意的是,來自Resources和Assets 中的文件只可以讀取而不能進行寫的操作。
C. 【總】Android之IO流/文件導航
本篇文章內容來自於
1. Android基礎之IO流
一、File類
--1.1 File類的構造方法
--1.2 File類的創建方法
--1.3 File類的常用方法
二、IO流
1.IO流分類
2.InputStream/OutputStream(位元組流基類 拷貝用這個)
3.Reader/Writer(字元流基類 只讀或者只寫用這個)
4. FileInputStream/FileOutputStream (文件輸入輸出流,一般都用這個)
5. BufferedInputStream/BufferedOutputStream (位元組緩沖流,減少與硬碟的交流次數,加快速度,需要flush()才可寫入)
6.IO流如何處理異常
7. FileReader/FileWriter (文件字元流)
8. BufferedReader/BufferedWriter (緩沖字元流,需要flush()才可寫入)
9. InputStreamReader/OutputStreamWriter轉換流 (將位元組流轉換成字元流)
10. ByteArrayInputStream/ByteArrayOutputStream (數組字元流,可以將流寫入到內存中,然後獲取所有結果)
11. DataInputStream/DataOutputStream (基本數據流,可以以基本數據的形式寫入和讀取)
12. ObjectInputStream/ObjectOutputStream (對象操作流,可以序列化或者反序列化)
三、IO流應用
1.處理流(BufferedXXX)配合節點流(XXXInputStream和XXXWriter/Reader)
2.輸入流(FileInputStream等)配合使用ByteArrayOutputStream(內存數組流),將輸入流內容一次性輸出
3.使用ObjectOutputStream將得到的密鑰Key對象存儲
文件有無後綴都會創建
輸入流/輸出流 (按流向分)
輸入流是寫入到內存 InputStream、Reader
輸出流是寫出到存儲設備 OutputStream、Writer
位元組流/字元流 (按操作類型分)
位元組流可操作任何數據 InputStream、OutputStream
字元流只能操作純字元數據 Reader、Writer
節點流/處理流
節點流的的構造參數是物理IO節點,比如public FileInputStream(File file)
處理流的構造參數是已經存在的流(裝飾設計模式),比如public BufferedOutputStream(OutputStream out)
常用節點流
InputStream是位元組輸入流的抽象基類
OutputStream是位元組輸入流的抽象基類
Reader是字元輸入流的抽象基類
Writer是字元輸出流的抽象基類
Android-IO流之文件輸入輸出位元組流FileInputStream/FileOutputStream
Android-IO流之緩沖位元組流BufferedInputStream/BufferedOutputStream
處理方式一:
處理方式二:
Android-IO流之文件字元流FileReader/FileWriter
Android-IO流之緩沖字元流BufferedReader/BufferedWriter
Android-IO流之轉換流InputStreamReader/OutputStreamWriter
Android-IO流之數組內存位元組流ByteArrayInputStream/ByteArrayOutputStream
Android-IO流之數據流DataInputStream/DataOutputStream
Android-IO流之對象操作流ObjectInputStream/ObjectOutputStream
實例:當系統提供的方法返回的是FileOutputStream時,想寫入字元串,則配合使用緩存流BufferedWriter和轉換流OutputStreamWriter
實例:當系統提供的方法返回是FileInputStream時,想讀出字元串信息。則配合使用BufferedReader和InputStreamReader
實例:將文件中的內容讀出顯示
D. android camera 獲取的byte流怎麼在surfaceview 顯示
1、定義
可以直接從內存或者DMA等硬體介面取得圖像數據,是個非常重要的繪圖容器。
它的特性是:可以在主線程之外的線程中向屏幕繪圖上。這樣可以避免畫圖任務繁重的時候造成主線程阻塞,從而提高了程序的反應速度。在游戲開發中多用到SurfaceView,游戲中的背景、人物、動畫等等盡量在畫布canvas中畫出。
2、實現
首先繼承SurfaceView並實現SurfaceHolder.Callback介面
使用介面的原因:因為使用SurfaceView 有一個原則,所有的繪圖工作必須得在Surface 被創建之後才能開始(Surface—表面,這個概念在 圖形編程中常常被提到。基本上我們可以把它當作顯存的一個映射,寫入到Surface 的內容
可以被直接復制到顯存從而顯示出來,這使得顯示速度會非常快),而在Surface 被銷毀之前必須結束。所以Callback 中的surfaceCreated 和surfaceDestroyed 就成了繪圖處理代碼的邊界。
需要重寫的方法
(1)public void surfaceChanged(SurfaceHolder holder,int format,int width,int height){}
//在surface的大小發生改變時激發
(2)public void surfaceCreated(SurfaceHolder holder){}
//在創建時激發,一般在這里調用畫圖的線程。
(3)public void surfaceDestroyed(SurfaceHolder holder) {}
//銷毀時激發,一般在這里將畫圖的線程停止、釋放。
整個過程:繼承SurfaceView並實現SurfaceHolder.Callback介面 ----> SurfaceView.getHolder()獲得SurfaceHolder對象 ---->SurfaceHolder.addCallback(callback)添加回調函數---->SurfaceHolder.lockCanvas()獲得Canvas對象並鎖定畫布----> Canvas繪畫 ---->SurfaceHolder.unlockCanvasAndPost(Canvas canvas)結束鎖定畫圖,並提交改變,將圖形顯示。
3、SurfaceHolder
這里用到了一個類SurfaceHolder,可以把它當成surface的控制器,用來操縱surface。處理它的Canvas上畫的效果和動畫,控製表面,大小,像素等。
幾個需要注意的方法:
(1)、abstract void addCallback(SurfaceHolder.Callback callback);
// 給SurfaceView當前的持有者一個回調對象。
(2)、abstract Canvas lockCanvas();
// 鎖定畫布,一般在鎖定後就可以通過其返回的畫布對象Canvas,在其上面畫圖等操作了。
(3)、abstract Canvas lockCanvas(Rect dirty);
// 鎖定畫布的某個區域進行畫圖等..因為畫完圖後,會調用下面的unlockCanvasAndPost來改變顯示內容。
// 相對部分內存要求比較高的游戲來說,可以不用重畫dirty外的其它區域的像素,可以提高速度。
(4)、abstract void unlockCanvasAndPost(Canvas canvas);
// 結束鎖定畫圖,並提交改變。
E. android中如何用InputStreamReader讀取 在raw文件夾中命名為 中文名字.txt 的文本文檔
android解決文件中文編碼問題:(關鍵是在位元組流轉換成字元流的過程中要定義轉換格式gbk,gb2312,UTF-8之類的)
虛擬機到本地主機:
FileInputStream fis = new FileInputStream(文件名);
InputStreamReader isr = new InputStreamReader(fis, "gbk");
BufferedReader br = new BufferedReader(isr);
本地到虛擬機:OutPutStreamWriter osw = new OutPutStreamWriter(文件位元組流,"gbk");