una studio persona nacimiento meses fecha edad dias como calcular años java bufferedreader peek

studio - como calcular la edad de una persona en años meses y dias en java



¿Puedo echar un vistazo a un BufferedReader? (8)

El idioma normal es comprobar en un bucle si BufferedReader#readLine() no devuelve null . Si se llega al final de la transmisión (por ejemplo, final del archivo, socket cerrado, etc.), devuelve un null .

P.ej

BufferedReader reader = new BufferedReader(someReaderSource); String line = null; while ((line = reader.readLine()) != null) { // ... }

Si no desea leer en líneas (lo cual es la principal razón por la que se eligió un BufferedReader ), entonces use BufferedReader#ready()

BufferedReader reader = new BufferedReader(someReaderSource); while (reader.ready()) { int data = reader.read(); // ... }

¿Hay alguna forma de verificar si en el objeto BufferedReader hay algo para leer? Algo como C ++ cin.peek() . Gracias.


El siguiente código mirará el primer byte en la secuencia. Debería actuar como un vistazo para ti.

BufferedReader bReader = new BufferedReader(inputStream); bReader.mark(1); int byte1 = bReader.read(); bReader.reset();


La respuesta de pgmura (confiar en el método ready ()) es simple y funciona. Pero tenga en cuenta que se debe a que Sun implementó el método; Lo que realmente no está de acuerdo con la documentación. No confiaría en eso, si este comportamiento es crítico. Consulte aquí http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4090471 Prefiero ir con la opción PushbackReader.


Mi solución fue ... extender BufferedReader y usar la cola como buf, luego puede usar el método peek en la cola.

public class PeekBufferedReader extends BufferedReader{ private Queue<String> buf; private int bufSize; public PeekBufferedReader(Reader reader, int bufSize) throws IOException { super(reader); this.bufSize = bufSize; buf = Queues.newArrayBlockingQueue(bufSize); } /** * readAheadLimit is set to 1048576. Line which has length over readAheadLimit * will cause IOException. * @throws IOException **/ //public String peekLine() throws IOException { // super.mark(1048576); // String peekedLine = super.readLine(); // super.reset(); // return peekedLine; //} /** * This method can be implemented by mark and reset methods. But performance of * this implementation is better ( about 2times) than using mark and reset **/ public String peekLine() throws IOException { if (buf.isEmpty()) { while (buf.size() < bufSize) { String readLine = super.readLine(); if (readLine == null) { break; } else { buf.add(readLine); } } } else { return buf.peek(); } if (buf.isEmpty()) { return null; } else { return buf.peek(); } } public String readLine() throws IOException { if (buf.isEmpty()) { while (buf.size() < bufSize) { String readLine = super.readLine(); if (readLine == null) { break; } else { buf.add(readLine); } } } else { return buf.poll(); } if (buf.isEmpty()) { return null; } else { return buf.poll(); } } public boolean isEmpty() throws IOException { if (buf.isEmpty()) { while (buf.size() < bufSize) { String readLine = super.readLine(); if (readLine == null) { break; } else { buf.add(readLine); } } } else { return false; } if (buf.isEmpty()) { return true; } else { return false; } } }


Puede utilizar un PushbackReader . Usando eso puedes leer un personaje, luego des-leerlo. Esto esencialmente le permite empujarlo hacia atrás.

PushbackReader pr = new PushbackReader(reader); char c = (char)pr.read(); // do something to look at c pr.unread((int)c); //pushes the character back into the buffer


Puedes probar el método "boolean ready ()". De la documentación de la API de Java 6: "Un flujo de caracteres en búfer está listo si el búfer no está vacío, o si el flujo de caracteres subyacente está listo".

BufferedReader r = new BufferedReader(reader); if(r.ready()) { r.read(); }


Puedes usar un PushBackReader para leer un personaje, y luego "empujarlo". De esa manera, estará seguro de que algo estaba allí, sin afectar su estado general: un "vistazo".


BufferedReader br = new BufferedReader(reader); br.mark(1); int firstByte = br.read(); br.reset();