powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / OutputStream хэш-код
25 сообщений из 26, страница 1 из 2
OutputStream хэш-код
    #38072729
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как можно можно вычистлить контрольную сумму файла

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

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

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

Это как?

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

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

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

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

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


надо

Код: java
1.
2.
3.
cos = new CheckedOutputStream(response.getOutputStream(), CRC32);
cos.write(content);
checkSum = cos.getCheckSum();
...
Рейтинг: 0 / 0
OutputStream хэш-код
    #38074219
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то у меня все 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
OutputStream хэш-код
    #38074230
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или можно как-то получить по другому CRC объекта hssfworkbook - там где формирую его, что ли
...
Рейтинг: 0 / 0
OutputStream хэш-код
    #38074237
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Издеваетесь что ли? Вы вообще не понимаете как оно работает?
Код: 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
OutputStream хэш-код
    #38137683
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что не так с 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
OutputStream хэш-код
    #38137684
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0 возращает
...
Рейтинг: 0 / 0
OutputStream хэш-код
    #38137703
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-0 возращает
Потому что данные через поток надо было прокачать.
Оборачивающий stream перехыватывает прокачиваемые через него данные и вычисляет по ним сумму. У вас через поток ничего не прокачано.
...
Рейтинг: 0 / 0
OutputStream хэш-код
    #38137718
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz-=Koba=-0 возращает
Потому что данные через поток надо было прокачать.
Оборачивающий stream перехыватывает прокачиваемые через него данные и вычисляет по ним сумму. У вас через поток ничего не прокачано.

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

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

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

Я извиняюсь, а можно небольшой пример
...
Рейтинг: 0 / 0
OutputStream хэш-код
    #38137787
Фотография 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
OutputStream хэш-код
    #38138286
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
OutputStream хэш-код
    #38138400
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-=Koba=-, а что будешь дальше делать с контрольной сумой? Я надеюсь ты не создаёшь свой
собственный над-сетевой протокол.
...
Рейтинг: 0 / 0
OutputStream хэш-код
    #38139646
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton-=Koba=-, а что будешь дальше делать с контрольной сумой? Я надеюсь ты не создаёшь свой
собственный над-сетевой протокол.
сверка с БД тупо и все

подкнилу чужое ТЗ
...
Рейтинг: 0 / 0
OutputStream хэш-код
    #38139653
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
OutputStream хэш-код
    #38146617
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фильтр

автор @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
OutputStream хэш-код
    #38147471
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
InputStream in = request.getInputStream(); 
CheckedInputStream inStream = new CheckedInputStream(in, new CRC32());
Long value = inStream.getChecksum().getValue();



А тут я правильно вызываю?
...
Рейтинг: 0 / 0
OutputStream хэш-код
    #38147481
Фотография -=Koba=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже и фильтр поменял, почему не вычисляется 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
25 сообщений из 26, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / OutputStream хэш-код
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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