2012-07-19 63 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块,顺便说一句。)