45 / 25 / 16
Регистрация: 14.04.2011
Сообщений: 623
1

Как правильно прочитать InputStream?

20.01.2015, 15:02. Показов 911. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
На сервер приходит HTTP запрос нужно как то его прочитать.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public void run()
{
    String
       headers  = "HTTP/1.0 200 OK\r\n";
       headers += "Server: ru.example.n11\r\n";
       headers += "Content-Type: text/html; charset=UTF-8\r\n";
       headers += "Keep-Alive: timeout=15\r\n";
       
    try
    {           
        InputStream input  = clientSocket.getInputStream();
        OutputStream output = clientSocket.getOutputStream();
        output.write(headers.getBytes());
        ByteArrayOutputStream buff = new ByteArrayOutputStream();
        
        int size = input.available();
        int sizer = size;
        this.DataAdd("- ", buff);
        byte[] buffer = new byte[64];
        while (true)
        {
            if (sizer <= 0) break;
            sizer -= input.read(buffer);                
            this.DataAdd(new String(buffer, "UTF-8").replace("\r\n", "<br>- "),buff);               
        }
        //this.M.toast_("END READ");
        
        this.DataAdd("<hr><br><b color=\"blue\">Size: </b>" + new Integer(size).toString(), buff);
        
        headers = this.AddHead;
        headers += "Content-Length: " + new Integer(buff.size()).toString() + "\r\n";
        headers += "Connection: close\r\n\r\n";
        
        output.write(headers.getBytes());
        buff.writeTo(output);            
        output.close();
        input.close();
        buff.close();
        buff = null;            
    }
    catch (IOException e)
    {
        //e.printStackTrace();
        this.M.toast_("[Exception]: " + e.getMessage());
    }
}
Java
1
2
3
4
5
6
7
8
9
10
private void DataAdd(String data,OutputStream os)
{
    try
    {
        os.write(data.getBytes());
    } catch (IOException e)
    {
        this.M.toast_("[Exception]: " + e.getMessage());
    }
}
Получаю см. приложение
Там видно, что в 2 последние строки влезли данные которые уже были выведены выше.
если размер буфера указываю например 2*1024, то результат уже правильный, в конце я вижу "\r\n\r\n"
так как определить какой размер нужно поставить? в месте с хидером может прийти POST, GET, бинарные данные.
Миниатюры
Как правильно прочитать InputStream?  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2015, 15:02
Ответы с готовыми решениями:

Как правильно прочитать данные?
Как правильно прочитать данные? &quot;ER-200&quot; 06:43 10:40 &quot;Red Arrow&quot; 23:55 07:55 &quot;Express&quot; 23:59...

Как правильно прочитать скрипт?
Разъясните, пожалуйста, что означает каждая из строк данного скрипта. Суть его заключается в том...

Как правильно прочитать конструкцию?
LEA EDX,DWORD PTR SS: как это правильно читается можно по подробней пожалуйста?

Как правильно прочитать текс?
device Atmega128 .include “m128def.inc” ldi r16,High(RAMEND) out SPH,r16 ...

2
206 / 206 / 71
Регистрация: 25.02.2014
Сообщений: 569
20.01.2015, 16:35 2
Путин, Может так
Java
1
2
3
4
5
   int c = in.read(buffer);
            while (c > 0) {
                   this.DataAdd(new String(buffer, "UTF-8").replace("\r\n", "<br>- "),buff);  
                c = in.read(buffer);
            }
1
45 / 25 / 16
Регистрация: 14.04.2011
Сообщений: 623
21.01.2015, 11:11  [ТС] 3
Kochmarik, Да почти, в UTF-8 1 буква занимает 2 байта, если так по 1 байту в String преобразовывать, то битая строка получится, но идею я понял
0
21.01.2015, 11:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.01.2015, 11:11
Помогаю со студенческими работами здесь

Как правильно прочитать объявление?
Как правильно прочитать данную конструкцию ((unsigned char*)(&amp;a)) ? Вот код.Помогите пожалуйста....

Как правильно прочитать определение множества?
Учусь аналитической геометрии по книжке Киркинского, там описано все самое главное достаточно...

C# и COM порт: как правильно прочитать данные
Здравствуйте. Написал простой код и не могу понять почему не работает. Кто подскажет буду очень...

Read(). Как правильно прочитать из сокета?
День добрый! Не могу понять почему read() пролетает не дождавшись каких либо данных .Код ниже ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru