2013-06-14 5 views
0

Я пишу приложение для Android, которое включает в себя загрузку файлов. Есть ли способ проверить код для потенциальной ошибки в памяти, не записав на самом деле код на стороне сервера? Если да, пожалуйста, объясните. Код приведен ниже: -Тестовый код без кода на стороне сервера

private void sendToRemoteServer(){ 
     Socket client; 
     FileInputStream fileInputStream; 
     BufferedInputStream bufferedInputStream; 
     OutputStream outputStream; 

     try{ 
      client     = new Socket("10.0.2.2",444); 
      byte[] myByteArray  = new byte[(int)mFile.length()]; 
      fileInputStream  = new FileInputStream(mFile); 
      bufferedInputStream = new BufferedInputStream(fileInputStream); 

      bufferedInputStream.read(myByteArray, 0, myByteArray.length); //read the file 

      outputStream = client.getOutputStream(); 

      outputStream.write(myByteArray, 0, myByteArray.length); //write file to the output stream byte by byte 
      outputStream.flush(); 
      bufferedInputStream.close(); 
      outputStream.close(); 
      client.close(); 
     }catch(UnknownHostException e) { 
      e.printStackTrace(); 
      } catch (IOException e) { 
      e.printStackTrace(); 
      } 
    } 
+1

ошибка, вероятно, произойдет здесь 'новый байт [(целое) mFile.length ()]; '. вы можете протестировать эту часть без сокета. – njzk2

+0

Okey, я получаю вашу точку :), спасибо за понимание :) –

ответ

0

Да, есть.

Это называется инъекцией зависимостей: http://en.wikipedia.org/wiki/Dependency_injection

Создать этот интерфейс

public interface ISocket{ 
    void close(): 
    OutputStream getOutputStream(); 
} 

И убедитесь, что ваш herits класса разъема от него.

Ваш конструктор становится

private void sendToRemoteServer(){ 
    ISocket client; 

Если вы хотите, чтобы проверить на месте, просто передать в качестве аргумента любой реализации ISocket, что делать то, что вы хотите с закрытым способом и методами getOutputStream.

1

Вам не нужно копировать весь файл сразу в массив байтов.

Это лучше, и никогда не должно вызывать проблемы с памятью (вы никогда не будете использовать более 8 кБ памяти):

byte[] myByteArray = new byte[8192]; 
int len; 
... 
while ((len = bufferedInputStream.read(mByteArray, 0, len)) != -1) 
    outputStream.write(mByteArray, 0, len); 
Смежные вопросы