2012-07-19 98 views
1

我正在通過套接字發送的文件中讀取,然後嘗試通過換行符(\ n)分割它,當我在文件中讀取時,我正在使用字節[],並且轉換將字節數組轉換爲字符串以便我可以分割它。由換行符分割字符串trouble

public String getUserFileData() 
{ 
    try 
    { 
     byte[] mybytearray = new byte[1024]; 
     InputStream is = clientSocket.getInputStream(); 
     int bytesRead = is.read(mybytearray, 0, mybytearray.length); 

     is.close(); 

     return new String(mybytearray); 
    } 
    catch(IOException e) 
    { 

    } 

    return ""; 
} 

這裏是用來企圖分裂字符串

public void readUserFile(String userData, Log logger) 
{ 
    String[] data; 
    String companyName; 

    data = userData.split("\n"); 

    username = data[0]; 
    password = data[1].toCharArray(); 
    companyName = data[2]; 
    quota = Float.parseFloat(data[3]); 

    company = new Company();    
    company.readCompanyFile("C:\\Users\\Chris\\Documents\\NetBeansProjects\\ArFile\\ArFile Clients\\" + companyName + "\\" 
      + companyName + ".cmp"); 

    cloudFiles = new CloudFiles(); 
    cloudFiles.readCloudFiles(this, logger); 
} 

它會導致這個錯誤

Exception in thread "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBoundsException 
+0

什麼是你的問題/麻煩/問題/疑問? – 2012-07-19 05:51:50

+7

用'BufferedReader'包裝流,有一個readLine方法。 – nhahtdh 2012-07-19 05:52:31

+0

啊,感謝您的編輯。現在請告訴我們***哪一行是這個異常的原因?你的代碼是否真的有空的catch塊? – 2012-07-19 05:52:35

回答

3

可以在BufferedReader類使用readLine方法。

包裹InputStreamInputStreamReader,並將其包裝下BufferedReader

InputStream is = clientSocket.getInputStream(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 

也請您查看流的編碼 - 你可能需要在InputStreamReader構造指定編碼。

+0

這不是什麼實際上導致我的問題,但病態標記爲答案,因爲這樣做會更好。我從那以後解決了我的問題,這只是我的愚蠢 – 2012-07-19 06:17:05

3

正如評論指出,使用BufferedReader將是最好的代碼 - 你應該無論如何使用InputStreamReader爲了從二進制轉換爲文本。

// Or use a different encoding - whatever's appropriate 
BufferedReader reader = new BufferedReader(
    new InputStreamReader(clientSocket.getInputStream(), "UTF-8"); 
try { 
    String line; 
    // I'm assuming you want to read every incoming line 
    while ((line = reader.readLine()) != null) { 
     processLine(line); 
    } 
} finally { 
    reader.close(); 
} 

請注意,這是您要使用的編碼狀態的重要 - 否則它會使用平臺的默認編碼,這將改變從機器到機器,而想必數據是在一個特定的編碼。如果您不知道哪種編碼尚未完成,則需要查明。在此之前,你根本無法可靠地理解數據。

(我希望你真正的代碼沒有一個空的catch塊,順便說一句。)