[問題] 讀取檔案的問題

看板java作者 ( )時間15年前 (2010/08/10 13:59), 編輯推噓1(1010)
留言11則, 5人參與, 最新討論串1/1
需要從binary檔案中一個byte一個byte的讀出,然後判斷內容做些處理之後透過網路送出 現在讀檔的部份,讀出的東西和預期的不一樣 謝謝tkcn大的指點,以下是修改後的部份code ----------------------------------------------------- byte addrArray[]=new char[16]; File updateFile=new File(updateFileTextField.getText()); FileInputStream fileStream=new FileInputStream(updateFile); Socket sock = serverSock.accept(); OutputStreamWriter writer = new OutputStreamWriter(sock.getOutputStream()); for(int i=0;i<16;i++){ addrArray[i]=(byte)fileStream.read(); System.out.print(Integer.toHexString(addrArray[i])+","); } writer.write(addrArray,0,16); writer.flush(); ------------------------------------------------------ 檔案中前16個bytes,在UltraEdit下看來是 00 01 00 00 00 00 00 FC 20 00 FB FF 00 03 D3 C8 接著下來是 00 03 D4 28............. 程式印出的結果是 0,1,0,0,0,0,0,fc,20,0,fb,ff,0,3,d3,c8 沒有問題 不過丟出去的封包是 00 01 00 00 00 00 00 3f 20 00 3f 3f 00 03 3f 3f 正在尋找問題以及解決的方法 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.66.86.158

08/10 14:13, , 1F
先確認toHexString()傳入參數的值域範圍
08/10 14:13, 1F

08/10 14:13, , 2F
你想要的是 byte 還是 char !?
08/10 14:13, 2F

08/10 14:19, , 3F
我想要byte toHexString只是為了確認結果
08/10 14:19, 3F

08/10 14:35, , 4F
我覺得可能是signed integer的關係吧? 一定要弄成int嗎?
08/10 14:35, 4F
弄成int只是因為read會回傳int 最終目的是要把資料原封不動透過網路傳送出去

08/10 14:39, , 5F
應該先把 Reader 換成 InputStream 吧
08/10 14:39, 5F
把FileReader換成InputStream嗎? ※ 編輯: lakegreen 來自: 210.66.86.158 (08/10 14:41) 不好意思之前說錯,不是字元,是binary ※ 編輯: lakegreen 來自: 210.66.86.158 (08/10 14:44)

08/10 14:43, , 6F
知道 Reader 和 InputStream 差在哪嗎? #1A81YuwL
08/10 14:43, 6F
※ 編輯: lakegreen 來自: 210.66.86.158 (08/10 16:16)

08/10 16:48, , 7F
Writer 也是一樣呀...XD
08/10 16:48, 7F

08/10 16:55, , 8F
writer也不能用啊…
08/10 16:55, 8F

08/10 17:22, , 9F
還有,你寫出去的是 char 陣列,其實用 byte 陣列比較好
08/10 17:22, 9F

08/11 09:46, , 10F
嗯 其實我已經改用byte了
08/11 09:46, 10F
※ 編輯: lakegreen 來自: 210.66.86.158 (08/11 09:47)

08/12 11:27, , 11F
改用byte XX = new char[16] ???這算有改嗎?
08/12 11:27, 11F
文章代碼(AID): #1COEh6W6 (java)