|
Сниффер текста из потока
|
|||
---|---|---|---|
#18+
Такая задачка. Нужно сделать сниффер потока, т.е. обёртка Stream, которая считывает текст из байтов, которые в него пишут и прочитанный текст пишет в другой поток. Почему сразу не писать байты в другой поток? Потому что нужно лимитированное количество текста. Приведу пример: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Проблема в том, что в UTF-8 один символ не всегда равен одному байту. А нужно перехватить не больше указанного количество байт, в виде текста. Что думаете? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 17:23 |
|
Сниффер текста из потока
|
|||
---|---|---|---|
#18+
значит реально ты не имеешь права перехватывать более maxSize-3 байт по определению. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 17:50 |
|
Сниффер текста из потока
|
|||
---|---|---|---|
#18+
Shocker.Pro, именно ) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 17:54 |
|
Сниффер текста из потока
|
|||
---|---|---|---|
#18+
А проблема-то в чём? Прочитал байты. Перевел в текст. Отбросил последний символ, так как он может быть некорректным, и обработал байты последнего символа вручную. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 17:56 |
|
Сниффер текста из потока
|
|||
---|---|---|---|
#18+
Shocker.Pro, Ну вот не выглядит как тривиальное решение, так как на входе байты пишутся, а не из потока читаем. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 18:07 |
|
Сниффер текста из потока
|
|||
---|---|---|---|
#18+
Ну байты байтами, вопрос в том, начало первой порции всегда соответствует началу символа или это вообще могут быть вырезанные из контекта байты? А так, можно не пытаться расшифровывать UTF-8. Получил maxSize байт, перевел в UTF-8, отрезал последний символ, определил длину строки в байтах. Оставшийся хвост байтов положил в буфер, дождался следующей порции, присоединил к предыдущему хвосту и далее сначала. Ну это если не хочется возиться с UTF8, вообще, окружающие требования до конца неясны, что, к примеру, происходит с потоком, когда достигнуто нужное количество символов. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 18:28 |
|
Сниффер текста из потока
|
|||
---|---|---|---|
#18+
Shocker.Pro, начало всегда хорошее, т.е. сниффер подключается до записи первого байта. вот пример: Код: c# 1.
Получается 13 байт: 208 159 209 128 208 184 208 178 208 181 209 130 33 На вход записалась порция из первых 5 байт. Что делать? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 18:59 |
|
Сниффер текста из потока
|
|||
---|---|---|---|
#18+
Вот болванка: Код: c# 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.
Не настаиваю на полноценной реализации, хотя было бы неплохо :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 19:12 |
|
Сниффер текста из потока
|
|||
---|---|---|---|
#18+
Это задание на собеседование? Что должно произойти, когда порог достигнут? Просто в пустоту байты будут уходить? TDD? Тест есть? Можно ли писать в Output с задержкой (буферизовать)? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 19:27 |
|
Сниффер текста из потока
|
|||
---|---|---|---|
#18+
Shocker.Pro, Почему на собеседование? Задание прикольное, намного интересней УГ "расположите цифры пирамидкой в консоли". Если порог достигнут, снифать больше не нужно, обёртка просто пробрасывает вызовы в input. Задержки, буферизация, что угодно, нужно чтобы надёжно работало. Тест, ну вот такой для примера: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
т.е. в буфере окажется столько текста, сколько вместилось с учётом лимита ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 19:39 |
|
Сниффер текста из потока
|
|||
---|---|---|---|
#18+
Ок, ковырну попозже ) то, что ты задаешь такой вопрос, какбэ намекает на подводные камни )) PS. Что за пирамидки? ) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 19:43 |
|
Сниффер текста из потока
|
|||
---|---|---|---|
#18+
Shocker.Pro PS. Что за пирамидки? ) Ну там на входе N, нужно нарисовать пирамидку цифрами от 1 до N :) Такие и подобные мне попадались Shocker.Pro то, что ты задаешь такой вопрос, какбэ намекает на подводные камни )) Да не, подводных камней нет. Из реальной задачи, думал может кто сталкивался. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2020, 19:55 |
|
Сниффер текста из потока
|
|||
---|---|---|---|
#18+
Блин, набросал по упрощенному варианту и понял, что от анализа на уровне кодировки не уйти. Иначе, если отбрасывать последний символ, то может возникнуть ситуация, если общая длина исходного потока на пару байтов больше, чем sniffMaxBytes, ты можешь упустить последний допустимый символ, то есть длина sniffa в символах может оказаться на один символ меньше, чем можно было бы запихнуть при заданном sniffMaxBytes. Но это очень пограничная и редкая ситуация, если она не критична для этого ТЗ, то тогда можно не заморачиваться с анализом. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2020, 00:36 |
|
Сниффер текста из потока
|
|||
---|---|---|---|
#18+
Shocker.Pro и понял, что от анализа на уровне кодировки не уйти Да вот как раз и хотелось бы уйти, не изобретать же на ровном месте велосипедов ) Короч, мне стало лень и я глянул реализацию StreamReader )) Решение кроется здесь: Encoding.UTF8. GetDecoder() Если интересно, рабочий варик завтра скину. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2020, 01:18 |
|
Сниффер текста из потока
|
|||
---|---|---|---|
#18+
Shocker.Pro Иначе, если отбрасывать последний символ, то может возникнуть ситуация, если общая длина исходного потока на пару байтов больше, чем sniffMaxBytes, ты можешь упустить последний допустимый символ, то есть длина sniffa в символах может оказаться на один символ меньше, чем можно было бы запихнуть при заданном sniffMaxBytes. Но это очень пограничная и редкая ситуация, если она не критична для этого ТЗ, то тогда можно не заморачиваться с анализом. Собственно Decoder хранит состояние, поэтому в него можно запихивать данные порциями, на выходе получать готовые чары, которые можно прочитать. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2020, 01:21 |
|
Сниффер текста из потока
|
|||
---|---|---|---|
#18+
hVostt Если интересно, рабочий варик завтра скину. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2020, 10:05 |
|
Сниффер текста из потока
|
|||
---|---|---|---|
#18+
Shocker.Pro, выдалось время, накропал ) немного условие изменилось, на выходе мне нужна заснифанная строка, но ограничения также -- в байтах метод представляющий интерес, отдельно выделен (Sniff) Код: c# 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. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286.
простенький тест: Код: c# 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2020, 03:02 |
|
|
start [/forum/topic.php?fid=20&fpage=10&tid=1398535]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
89ms |
get tp. blocked users: |
2ms |
others: | 229ms |
total: | 423ms |
0 / 0 |