Java.lang.OutOfMemoryError с сетевым домашним заданием - PullRequest
2 голосов
/ 08 февраля 2012

В настоящее время я пишу сетевое задание для одного из моих классов в колледже, и у меня возникла небольшая проблема.Это назначение состоит из настройки набора узлов, которые взаимодействуют друг с другом через сокеты, используя предопределенный набор сообщений.Эти сообщения должны быть в состоянии быть составлены из байтовых данных, которые отправляются обратно и четвертым из сокетов.

Вот пример метода внутри одного из сообщений, который обрабатывает данные из байта []:

    public void processData(byte [] data) throws IOException 
{
    DataInputStream stream = new DataInputStream(new ByteArrayInputStream(data));
    //get the status code
    statusCode = (byte)stream.read();
    System.out.println("Status Code: "+statusCode);

    //get the additional info
    byte [] additionalInfoData = new byte[stream.readInt()];
    stream.read(additionalInfoData, 0, additionalInfoData.length);
    additionalInfo = new String(additionalInfoData);
    System.out.println("additionalInfo: "+statusCode);

    stream.close();

}

Когда я запускаю программу, и она достигает этой точки (этопосле первого сообщения) оно останавливается на

    byte [] additionalInfoData = new byte[stream.readInt()];

с этим исключением:

Exception in thread "Thread-1" java.lang.OutOfMemoryError: Java heap space at cdn.wireformats.RegisterResponse.processData(RegisterResponse.java:58) at cdn.wireformats.RegisterResponse.<init>(RegisterResponse.java:31) at cdn.wireformats.WireFormatFactory.getWireFormatMessage(WireFormatFactory.java:22) at cdn.communications.Link.readMessage(Link.java:62) at cdn.communications.Link.run(Link.java:98) at java.lang.Thread.run(Thread.java:679)

Кто-нибудь знает, как это исправитьпроблема?Я неправильно читаю данные из байта []?

Ответы [ 2 ]

2 голосов
/ 08 февраля 2012

Скорее всего, значение, которое вы получите от stream.readInt(), не соответствует ожидаемому. Я бы порекомендовал распечатать его и убедиться, что он правильный.

Возможно, проблема endianness или что принимающий код не на 100% соответствует отправляющему коду.

0 голосов
/ 08 февраля 2012

Почему бы не написать

byte [] additionalInfoData = new byte[stream.readByte()];

Некоторые общие соображения по поводу управления памятью, которые могут быть полезны: размер пространства кучи по умолчанию составляет 64 МБ. Чтобы расширить его, вам нужно запустить JVM с параметром Xmx.

java -Xmx512M
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...