Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / OutputStream хэш-код / 25 сообщений из 26, страница 1 из 2
10.12.2012, 16:10:23
    #38072729
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
Как можно можно вычистлить контрольную сумму файла

Класс outputstream;
...
Рейтинг: 0 / 0
10.12.2012, 16:13:15
    #38072737
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
CheckedOutputStream ?
...
Рейтинг: 0 / 0
10.12.2012, 16:21:27
    #38072760
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
BlazkowiczCheckedOutputStream ?
Данные берутся от сюда

java.lang.Object
java.io.OutputStream
javax.servlet.ServletOutputStream

Так что не получается при кстовать
...
Рейтинг: 0 / 0
10.12.2012, 16:27:38
    #38072777
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
-=Koba=-Данные берутся от сюда
java.lang.Object

Это как?

-=Koba=- java.io.OutputStream
javax.servlet.ServletOutputStream
Так что не получается при кстовать

Оборачивать надо а не кастовать
...
Рейтинг: 0 / 0
10.12.2012, 16:30:34
    #38072790
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
Давайте попробую объяснить.
OutputStream это не "источник данных". Данные не могут оттуда "браться".
OutputStream это интерфейс для записи данных куда либо.
Для того чтобы подсчитать контрольную сумму, нужно обернуть целевой
OutputStream в CheckedOutputStream и провести запись через тот же самый интерфейс.
В результатне CheckedOutputStream делегирует запись в "целевой OutputStream", но при этом подсчитает и сумму, которую можно получить по окончании записи.
...
Рейтинг: 0 / 0
10.12.2012, 16:39:41
    #38072814
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
Спасибо за помощь
...
Рейтинг: 0 / 0
10.12.2012, 17:29:34
    #38072933
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
BlazkowiczДавайте попробую объяснить.
OutputStream это не "источник данных". Данные не могут оттуда "браться".
OutputStream это интерфейс для записи данных куда либо.
Для того чтобы подсчитать контрольную сумму, нужно обернуть целевой
OutputStream в CheckedOutputStream и провести запись через тот же самый интерфейс.
В результатне CheckedOutputStream делегирует запись в "целевой OutputStream", но при этом подсчитает и сумму, которую можно получить по окончании записи.

Что-то туплю((

Можно пример?
...
Рейтинг: 0 / 0
10.12.2012, 17:32:53
    #38072941
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
есть

Код: java
1.
response.getOutputStream().write(content);


надо

Код: java
1.
2.
3.
cos = new CheckedOutputStream(response.getOutputStream(), CRC32);
cos.write(content);
checkSum = cos.getCheckSum();
...
Рейтинг: 0 / 0
11.12.2012, 14:44:49
    #38074219
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
Что-то у меня все 0 выдает =(

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
                        OutputStream out = response.getOutputStream();
                        result.getBook().write(out);
                                                                 
                        out.flush();
                        response.flushBuffer();
                        
                        CheckedOutputStream outStream = new CheckedOutputStream(out, new CRC32());
                        Long value =outStream.getChecksum().getValue();



result.getBook().write(out); - это вот этот объект http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Workbook.html
По завершению метода doGet(HttpServlet) файл сохраняется
...
Рейтинг: 0 / 0
11.12.2012, 14:47:54
    #38074230
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
Или можно как-то получить по другому CRC объекта hssfworkbook - там где формирую его, что ли
...
Рейтинг: 0 / 0
11.12.2012, 14:51:16
    #38074237
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
Издеваетесь что ли? Вы вообще не понимаете как оно работает?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
                        OutputStream out = response.getOutputStream();
                        CheckedOutputStream outStream = new CheckedOutputStream(out, new CRC32());
                        result.getBook().write(outStream);
                                                                 
                        outStream.flush();
                        response.flushBuffer();
                        
                        Long value =outStream.getChecksum().getValue();
...
Рейтинг: 0 / 0
05.02.2013, 12:14:21
    #38137683
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
А что не так с InputStream

Код: java
1.
2.
3.
4.
5.
          InputStream in = request.getInputStream();
          CheckedInputStream inStream = new CheckedInputStream(in,
                new CRC32());
          Long value = inStream.getChecksum().getValue();
          logger.info(value.toString());
...
Рейтинг: 0 / 0
05.02.2013, 12:14:31
    #38137684
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
0 возращает
...
Рейтинг: 0 / 0
05.02.2013, 12:22:16
    #38137703
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
-=Koba=-0 возращает
Потому что данные через поток надо было прокачать.
Оборачивающий stream перехыватывает прокачиваемые через него данные и вычисляет по ним сумму. У вас через поток ничего не прокачано.
...
Рейтинг: 0 / 0
05.02.2013, 12:29:25
    #38137718
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
Blazkowicz-=Koba=-0 возращает
Потому что данные через поток надо было прокачать.
Оборачивающий stream перехыватывает прокачиваемые через него данные и вычисляет по ним сумму. У вас через поток ничего не прокачано.

А чот значит прокачать через поток?
Вроде б уже в самом strem size>0
...
Рейтинг: 0 / 0
05.02.2013, 12:34:00
    #38137731
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
-=Koba=-А чот значит прокачать через поток?

Это значит что их нужно вычитать из CheckedInputStream , или записать в CheckedOutputStream.
Смотря что вы считаете.
...
Рейтинг: 0 / 0
05.02.2013, 12:51:03
    #38137767
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
Blazkowicz-=Koba=-А чот значит прокачать через поток?

Это значит что их нужно вычитать из CheckedInputStream , или записать в CheckedOutputStream.
Смотря что вы считаете.

Я извиняюсь, а можно небольшой пример
...
Рейтинг: 0 / 0
05.02.2013, 12:59:08
    #38137787
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
-=Koba=-Я извиняюсь, а можно небольшой пример
Было
Код: java
1.
2.
InputStream in = ...
readDataFrom(in);


нужно
Код: java
1.
2.
3.
4.
5.
6.
InputStream in = ...;
CheckedInputStream inStream = new CheckedInputStream(in,
                new CRC32());
readDataFrom(inStream);
Long value = inStream.getChecksum().getValue();
logger.info(value.toString());



Но. Для Request всё немного сложнее. Дело в том что контейнер или какой-то фреймверк может сам уже вычитать данные из request InputStream до того как вы получите на него ссылку.
Поэтому лучше всего завести фильтр где-то на самом верхнем уровне. И использовать ServletRequestWrapper, чтобы заменить оригинальный Request, на свой собственный в котором getInputStream вернет CheckedInputStream.
Потом нужно отправить запрос на дальнейшую обработку, и после окончания обработки, проверить контрольную сумму.

Если вы этот запрос полностью обрабатываете сами без фреймверков и без чтения POST параметров контейнером, то можно не заморачиваться.
...
Рейтинг: 0 / 0
05.02.2013, 16:23:23
    #38138286
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
Blazkowicz-=Koba=-Я извиняюсь, а можно небольшой пример
Было
Код: java
1.
2.
InputStream in = ...
readDataFrom(in);


нужно
Код: java
1.
2.
3.
4.
5.
6.
InputStream in = ...;
CheckedInputStream inStream = new CheckedInputStream(in,
                new CRC32());
readDataFrom(inStream);
Long value = inStream.getChecksum().getValue();
logger.info(value.toString());



Но. Для Request всё немного сложнее. Дело в том что контейнер или какой-то фреймверк может сам уже вычитать данные из request InputStream до того как вы получите на него ссылку.
Поэтому лучше всего завести фильтр где-то на самом верхнем уровне. И использовать ServletRequestWrapper, чтобы заменить оригинальный Request, на свой собственный в котором getInputStream вернет CheckedInputStream.
Потом нужно отправить запрос на дальнейшую обработку, и после окончания обработки, проверить контрольную сумму.

Если вы этот запрос полностью обрабатываете сами без фреймверков и без чтения POST параметров контейнером, то можно не заморачиваться.

мммм думал будет проще все =(
...
Рейтинг: 0 / 0
05.02.2013, 16:55:40
    #38138400
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
-=Koba=-, а что будешь дальше делать с контрольной сумой? Я надеюсь ты не создаёшь свой
собственный над-сетевой протокол.
...
Рейтинг: 0 / 0
06.02.2013, 11:57:24
    #38139646
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
mayton-=Koba=-, а что будешь дальше делать с контрольной сумой? Я надеюсь ты не создаёшь свой
собственный над-сетевой протокол.
сверка с БД тупо и все

подкнилу чужое ТЗ
...
Рейтинг: 0 / 0
06.02.2013, 12:01:18
    #38139653
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
Blazkowicz-=Koba=-Я извиняюсь, а можно небольшой пример
Было
Код: java
1.
2.
InputStream in = ...
readDataFrom(in);


нужно
Код: java
1.
2.
3.
4.
5.
6.
InputStream in = ...;
CheckedInputStream inStream = new CheckedInputStream(in,
                new CRC32());
readDataFrom(inStream);
Long value = inStream.getChecksum().getValue();
logger.info(value.toString());



Но. Для Request всё немного сложнее. Дело в том что контейнер или какой-то фреймверк может сам уже вычитать данные из request InputStream до того как вы получите на него ссылку.
Поэтому лучше всего завести фильтр где-то на самом верхнем уровне. И использовать ServletRequestWrapper, чтобы заменить оригинальный Request, на свой собственный в котором getInputStream вернет CheckedInputStream.
Потом нужно отправить запрос на дальнейшую обработку, и после окончания обработки, проверить контрольную сумму.

Если вы этот запрос полностью обрабатываете сами без фреймверков и без чтения POST параметров контейнером, то можно не заморачиваться.
Я извиняюсь можно более подробный пример - не хватает сделать
Фрейм GWT связка стандартная, реквест приходит на сервер - тут работает
метод doPost - тут затрудняюсь как получить все
...
Рейтинг: 0 / 0
11.02.2013, 18:06:39
    #38146617
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
Фильтр

автор @Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {

HttpServletRequest httpRequest = (HttpServletRequest) request;
// HttpServletResponse httpResponse = (HttpServletResponse) response;

RequestWrapper rw = new RequestWrapper(httpRequest);

chain.doFilter(rw, response);
}


Wrapper

авторpublic class RequestWrapper extends HttpServletRequestWrapper {
public RequestWrapper(HttpServletRequest httpServletRequest) {
super(httpServletRequest); // super.request = httpServletRequest;
}

private byte[] bytes = null;

public ServletInputStream getInputStream() throws IOException {
if (bytes == null) { // first time
InputStream in = super.getRequest().getInputStream();
bytes = new byte[super.getRequest().getContentLength()];
for (int r, offset = 0; (r = in.read(bytes, offset, bytes.length
- offset)) > -1;) {
offset += r;
}
}
final InputStream in = new ByteArrayInputStream(bytes);
return new ServletInputStream() {
public int read() throws IOException{
return in.read();
}
};
}

public BufferedReader getReader() throws IOException {
return new BufferedReader(new InputStreamReader(getInputStream()));
}
}


servlet

автор @SuppressWarnings("unchecked")
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
requestW = (RequestWrapper) request;
checkCRC(requestW, response);
}

private boolean checkCRC(ResponseWrapper request, HttpServletResponse response){
try {
InputStream in = request.getInputStream();
CheckedInputStream inStream = new CheckedInputStream(in, new CRC32());
Long value = inStream.getChecksum().getValue();
logger.info(value.toString());

} catch (IOException e) {
e.printStackTrace();
}
return false;
}
}



Почему сейчас тоже 0?
...
Рейтинг: 0 / 0
12.02.2013, 12:11:03
    #38147471
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
Код: java
1.
2.
3.
InputStream in = request.getInputStream(); 
CheckedInputStream inStream = new CheckedInputStream(in, new CRC32());
Long value = inStream.getChecksum().getValue();



А тут я правильно вызываю?
...
Рейтинг: 0 / 0
12.02.2013, 12:17:23
    #38147481
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OutputStream хэш-код
Я уже и фильтр поменял, почему не вычисляется crc?

Код: 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.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
public class UploadFilter implements Filter {

    private static Logger logger = LoggerFactory.getLogger(UploadFilter.class);

    public UploadFilter() {

    }

    public void destroy() {
    }

    public void doFilter(ServletRequest request, ServletResponse response,
          FilterChain chain) throws IOException, ServletException {
      ResettableStreamHttpServletRequest wrappedRequest = new ResettableStreamHttpServletRequest(
            (HttpServletRequest) request);
      // wrappedRequest.getInputStream().read();
      String body = IOUtils.toString(wrappedRequest.getReader());
      logger.info(wrappedRequest.getRequestURI());
      logger.info(body);
      wrappedRequest.resetInputStream();
      chain.doFilter(wrappedRequest, response);

    }

    public void init(FilterConfig arg0) throws ServletException {
    }

    private static class ResettableStreamHttpServletRequest extends
          HttpServletRequestWrapper {

      private byte[] rawData;
      private HttpServletRequest request;
      private ResettableServletInputStream servletStream;

      public ResettableStreamHttpServletRequest(HttpServletRequest request) {
          super(request);
          this.request = request;
          this.servletStream = new ResettableServletInputStream();
      }

      public void resetInputStream() {
          servletStream.stream = new ByteArrayInputStream(rawData);
      }

      @Override
      public ServletInputStream getInputStream() throws IOException {
          if (rawData == null) {
            rawData = IOUtils.toByteArray(this.request.getReader());
            servletStream.stream = new ByteArrayInputStream(rawData);
          }
          return servletStream;
      }

      @Override
      public BufferedReader getReader() throws IOException {
          if (rawData == null) {
            rawData = IOUtils.toByteArray(this.request.getReader());
            servletStream.stream = new ByteArrayInputStream(rawData);
          }
          return new BufferedReader(new InputStreamReader(servletStream));
      }

      private class ResettableServletInputStream extends ServletInputStream {

          private InputStream stream;

          @Override
          public int read() throws IOException {
            return stream.read();
          }
      }
    }

}



String body = IOUtils.toString(wrappedRequest.getReader()); - тут все начитываеся
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / OutputStream хэш-код / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]