Вы хотите присвоить что-то вроде этого onfocus:
if (this.value == this.defaultValue)
this.value = ''
this.className = ''
и это к onblur:
if (this.value == '')
this.value = this.defaultValue
this.className = 'placeholder'
(Можно использовать что-то немного более умное, как функция платформы, чтобы сделать переключение имени класса, если Вы хотите.)
С некоторым CSS как это:
input.placeholder{
color: gray;
font-style: italic;
}
DataInputStream, скорее всего, то, что вы хотите использовать. Также не используйте метод available (), поскольку он обычно бесполезен.
Я не уверен, что следил за вашим объяснением.
Однако да - у вас нет реального контроля над тем, сколько на самом деле будет читать BufferedReader. Суть такого считывателя в том, что он оптимистично считывает фрагменты базового ресурса по мере необходимости для пополнения своего буфера. Поэтому, когда вы впервые вызываете readLine
, он увидит, что в его внутреннем буфере недостаточно для обслуживания вашего запроса, и отключится и прочитает сколько байтов, сколько ему кажется, в свой буфер ] из основного источника, что, как правило, будет намного больше, чем вы просили. После того, как буфер заполнен, он возвращает вашу строку из буферизованного содержимого.
Таким образом, после того, как вы обернули входной поток в BufferedReader, вы должны быть уверены, что читаете этот поток только через тот же буферизованный считыватель.
BufferedReader предполагает, что это единственное чтение из базового входного потока.
Его цель - минимизировать количество чтений из базового потока (что дорого, поскольку они могут делегировать довольно глубоко). Для этого он хранит буфер, который заполняется, считывая в него как можно больше байтов за один вызов базового потока.
Так что да, ваш диагноз точен.
Здесь просто дикий удар - 40000 - это 1001110001000000 в двоичном формате. Итак, первые семь битов - это 1001110, то есть 78. Это означает, что вы пишете 2 байта информации, но читаете семь бит.