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が最善です-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();
}

使用するエンコーディングを指定することが重要であることに注意してください。そうでない場合は、プラットフォームのデフォルトのエンコーディングが使用されます。これはマシンごとに異なりますが、おそらくデータ1つの特定のエンコーディングです。まだどのエンコーディングかわからない場合は、調べる必要があります。それまでは、データを確実に理解することはできません。

(ちなみに、実際のコードに空のキャッチブロックがないことを願っています。)

于 2012-07-19T06:02:53.687 に答える
3

BufferedReaderクラスでreadLineメソッドを使用できます。

下を包み、InputStreamInputStreamReaderに包みますBufferedReader

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

ストリームのエンコーディングも確認してください。のコンストラクタでエンコーディングを指定する必要がある場合がありますInputStreamReader

于 2012-07-19T06:03:42.987 に答える