1

我正在读取通过套接字发送的文件,然后尝试通过换行符 (\n) 将其拆分,当我读取文件时,我使用的是 byte[] 并将字节数组转换为字符串,以便我可以拆分它。

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
4

2 回答 2

3

如评论中所述,BufferedReader最好使用 a - 您应该使用 anInputStreamReader来从二进制转换为文本。

// 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 块。)

于 2012-07-19T06:02:53.687 回答
3

您可以使用BufferedReader类中的readLine方法。

InputStream下面InputStreamReader包起来,然后把它包在下面BufferedReader

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

还请检查流的编码 - 您可能需要在InputStreamReader.

于 2012-07-19T06:03:42.987 回答