我正在读取一个文件,该文件通过套接字发送,然后尝试通过换行符(\ n)将其拆分,当我在文件中读取时我正在使用byte []并将字节数组转换为a字符串,以便我可以拆分它。
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 "";
}
以下是用于尝试拆分String
的代码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 :(得分: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块。)
答案 1 :(得分:3)
您可以在readLine课程中使用BufferedReader方法。
将InputStream
换成InputStreamReader
,并将其打包在BufferedReader
下:
InputStream is = clientSocket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
还请检查流的编码 - 您可能需要在InputStreamReader
的构造函数中指定编码。